在JavaScript中使用美元符号的目的是什么?

有问题的代码在这里:

var $item = $(this).parent().parent().find('input');

在变量名中使用美元符号的目的是什么,为什么不直接排除它呢?

499418 次浏览

没有理由。也许编写代码的人来自PHP。它的效果与将其命名为“_item”或“item”或“item$$”相同。

作为一个后缀(如"item$",发音为"items"),它可以表示一个可观察对象,如DOM元素,作为一种名为“芬兰符号”的约定,类似于匈牙利符号。

变量中的'$'对于解释器来说没有任何特殊意义,就像下划线一样。

据我所见,许多人使用jQuery(这就是你的示例代码在我看来的样子)倾向于给包含jQuery对象的变量加上$前缀,这样它们很容易被识别,不会与整数混淆。

jQuery中的美元符号函数$()是一个经常使用的库函数,因此希望有一个简短的名称。

美元符号就像一个普通的字母或下划线(_)。它对解释器没有特别的意义。

与许多类似的语言不同,Javascript中的标识符(如函数名和变量名)不仅可以包含字母、数字和下划线,还可以包含还能包含美元符号吗。它们甚至可以以美元符号开头,或者由美元符号组成只有

因此,$是Javascript中有效的函数或变量名。

为什么要在标识符中使用美元符号?

该语法并没有真正强制在标识符中使用美元符号的任何特定用法,因此取决于您希望如何使用它。在过去,通常建议只在生成的代码中开始一个带有美元符号的标识符——也就是说,不是手工创建的代码,而是由代码生成器创建的代码。

然而,在你的例子中,情况似乎并非如此。看起来好像有人只是为了好玩才在开头放了一个美元符号——也许他们是PHP程序员,出于习惯才这么做的,或者别的什么。在PHP中,所有变量名前面都必须有一个美元符号。

现在在解释器中,美元符号还有另一个常见的含义:jQuery对象,其名称只有由单个美元符号($)组成。这是从早期的Javascript框架(如Prototype)中借来的约定,如果jQuery与其他这样的框架一起使用,将会有名称冲突,因为它们都将使用$这个名称(jQuery可以配置为其全局对象使用不同的名称)。在Javascript中,没有什么特别的东西允许jQuery使用单个美元符号作为对象名;如上所述,它只是另一个有效的标识符名称。

这里有一个很好的短视频解释:https://www.youtube.com/watch?v=Acm-MD_6934

根据Ecma,国际标识符名称是根据Unicode标准第五章的“标识符”部分中给出的语法进行解释的标记,并进行了一些小的修改。标识符是一个不是保留字(看到7.6.1)的IdentifierName。Unicode标识符语法基于Unicode标准指定的规范性和信息性字符类别。Unicode标准3.0版本中指定类别中的字符必须被所有符合ECMAScript实现视为这些类别中的字符。该标准指定了特定的字符添加:

美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置

进一步的阅读可以在http://www.ecma-international.org/ecma-262/5.1/#sec-7.6上找到

< em > Ecma国际是一个成立于1961年的行业协会,致力于信息和通信技术(ICT)和消费电子产品(CE)的标准化

在你的例子中,$除了作为名称的一个字符外没有任何特殊的意义。

然而,在ECMAScript 6 (ES6)中,$可能表示模板文字

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

美元符号在ecmascript 2015-2016中用作“模板字面量”。 例子:< / p >

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

以下是工作示例: https://es6console.com/j3lg8xeo/ 注意这个符号" ",它不是普通的引号

你也可以在使用jQuery库时遇到$。

正则表达式中的$符号表示行结束。

在使用jQuery时,使用$符号作为变量名的前缀只是一种惯例;它是完全可选的,仅用于指示变量保存jQuery对象,如示例中所示。

这意味着当需要在对象上调用另一个jQuery函数时,你不需要再次将它包装在$()中。例如,比较这些:

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this


// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

使用$前缀,已经包含jQuery对象的变量可以立即识别,并且代码更具可读性,并且使用$()消除了双/多包装。

"使用美元符号在JavaScript中并不常见,但是 专业程序员经常使用它作为main的别名

. JavaScript函数 例如,在JavaScript库jQuery中,主函数$ 用于选择HTML元素。在jQuery中,$("p");的意思是“选择所有” p elements"。“< / p >

通过https://www.w3schools.com/js/js_variables.asp

我可能会补充说,使用它的jQuery可以让你做这样的事情,例如:

$.isArray(myArray);
    let $ = "Hello";
let $$ = "World!";
let $$$$$$$$$$$ = $ + " " + $$;
alert($$$$$$$$$$$);

这将显示“Hello World!”警告框。

正如你所看到的,$只是JavaScript 标识符或变量名的一个普通字符。事实上,您可以使用大量Unicode字符作为变量名,使其看起来像美元或其他货币符号!

只是要小心,因为$符号也被用作jQuery命名空间/库的引用:

$("p").text("I am using some jquery");


// ...is the same as...


jQuery("p").text("I am using some jquery");

$也在新的模板文字格式中使用,使用JavaScript版本ES6/2015支持的字符串插值:

var x = `Hello ${name}`;

我要补充一点:

在铬浏览器的开发控制台(还没有尝试过其他),$是一个本地函数,就像document.querySelector一样,最有可能是一个别名,灵感来自JQuery的$