Чи може хтось пояснити знак долара у Javascript?


378

Код, про який йдеться, тут:

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

Яке призначення знаку долара у назві змінної, чому б просто не виключити його?


3
можливий дублікат stackoverflow.com/questions/205853/…
DisgruntledGoat

[відповідь ttony21] [1] неправильна, стверджуючи, що в Javascript немає типів, пор. [офіційна документація] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

Цей потік є досить старим, але, схоже, основні браузери стандартизували глобальні параметри $, $$. Що повинен робити $ vs $$?
Нік Сотірос

Нічого, якщо ви не знаходитесь у зазначеній консолі браузера. Наприклад, Chrome визначає $ та $$ як ярлики до document.querySelectorтаdocument.querySelectorAll
Кевін B

Відповіді:


381

"$" У змінній не означає нічого особливого для перекладача, як підкреслення.

З того, що я бачив, багато людей, які використовують jQuery (саме так виглядає ваш прикладний код), мають тенденцію до префікса змінних, які містять об'єкт jQuery з $, щоб вони легко були ідентифіковані та не змішані з, скажімо, цілими числами .

Функція знака долара $()в jQuery - це функція бібліотеки, яка часто використовується, тому бажане коротке ім’я.


86
Примітка. За замовчуванням jQuery використовує "$" як ярлик для "jQuery". Це має певний вплив на використання інших бібліотек Javascript. Дивіться docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
Іншими словами, $ порівняно з будь-яким прийнятним символом у назвах змінних / функцій. Робити var $=function(){}це так само, як робити var a=function(){}.
F-3000

24
Thimmayya ваш коментар "За замовчуванням jQuery використовує" $ "як ярлик для" jQuery "", слід жирними літерами вгорі кожної сторінки на веб-сайті Jquery. Їх приклади жахливо задокументовані.
RustyH

А як бути, коли $ вказується як параметр функції? Я дивлюся на якийсь код на кшталт jQuery(document).ready(function($){... Тоді $ використовується всередині реалізації функції.
still_dreaming_1

4
@ ThrowawayAccount3Million Це лише частина назви. У випадку $scope$ є одним із символів цього імені. Так само, як якщо ви знімете eв кінці $scope, це не спрацює, так що прийняття $волі також не вийде. У випадку, якщо ви бачите щось подібне $( "a" ).addClass( "test" ), знак долара - це все ім’я того, що це є.
still_dreaming_1

49

У вашому прикладі $ не має особливого значення, крім того, щоб бути символом імені.

Однак у ECMAScript 6 (ES6) $ може представляти собою літеральний шаблон

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

37

Знак $ - це ідентифікатор змінних та функцій.

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

Це чітко пояснює, для чого призначений знак долара.

Ось альтернативне пояснення: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
У Javascript є типи; і в будь-якому випадку, як знак долара навіть пов'язаний з цим? Це просто символ, який, як правило, є юридичним ідентифікатором у Javascript.
Ерік Каплун

10
Я не впевнений, що назвав би це посилання "чітким" поясненням. Чи дійсно потрібно 6+ абзаців, щоб пояснити, що $ - це просто дійсний символ при визначенні імен функції та змінних?
Трохи

1
Схоже, перша посилання знову працює. Я маю згоду з @Slight, що альтернативне пояснення є жахливим.
Сандер Гарретсен

Зразок коду за посиланням зрозуміти досить просто. Дивовижно!
蔡宗容

32

Знак долара трактується так само, як звичайна літера або підкреслення ( _). Він не має особливого значення для перекладача.

На відміну від багатьох подібних мов, ідентифікатори (такі як імена функціональних та змінних) у Javascript можуть містити не тільки літери, цифри та підкреслення, але також можуть містити знаки долара . Їм навіть дозволяється починати зі знака долара, або складаються лише зі знака долара і нічого іншого.

Таким чином, $є дійсною функцією або ім'ям змінної у Javascript.

Чому ви хочете вказувати знак долара в ідентифікаторі?

Синтаксис насправді не вимагає конкретного використання знака долара в ідентифікаторі, тому від вас залежить, як ви хочете його використовувати. У минулому часто рекомендували запускати ідентифікатор зі знаком долара тільки в генерованому коді - тобто коді, створеному не вручну, а генератором коду.

Однак у вашому прикладі це не так. Схоже, хтось просто поставив знак долара на початку для розваги - можливо, це був PHP-програміст, який це робив за звичкою, чи щось. У PHP всі назви змінних повинні мати знак долара перед собою.

Сьогодні в інтерпретаторі є ще одне загальне значення для знака долара: об’єкт jQuery, назва якого складається лише з одного знака долара ( $). Це умовна умова, запозичена з попередніх фреймів Javascript, як прототип, і якщо jQuery використовується з іншими такими рамками, відбудеться зіткнення імені, оскільки вони обидва будуть використовувати ім'я $(jQuery може бути налаштований так, щоб використовувати інше ім'я для свого глобального об'єкта) . У Javascript немає нічого особливого, що дозволяє jQuery використовувати знак єдиного долара в якості назви об'єкта; як згадувалося вище, це просто ще одне дійсне ім'я ідентифікатора.


Не можна конфліктувати об’єкт jQuery з цим var $j = jQuery.noConflict();тепер $ j - об'єктом jQuery.
Джустін Лю

6

Знак долара використовується в ecmascript 2015-2016 як " буквальний шаблон". Приклад:

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

Ось робочий приклад: https://es6console.com/j3lg8xeo/ Помітьте цей знак " ` ", його не звичайні лапки.

Ви також можете зустріти $ під час роботи з бібліотекою jQuery .

$ знак у регулярних виразах означає кінець рядка.


4

Без причини. Можливо, людина, яка її кодувала, походить із PHP. Це має такий самий ефект, як якщо б ви назвали його "_item" або "item" або "item $$".

Як суфікс (на кшталт "item $", вимовляється "items"), він може означати спостережуваний, наприклад, елемент DOM як конвенцію, що називається "фінська нотація", аналогічну угорській нотації.


1

Ось хороше коротке пояснення відео: https://www.youtube.com/watch?v=Acm-MD_6934

Відповідно до міжнародних ідентифікаторів Ecma, імена - це лексеми, які інтерпретуються відповідно до граматики, наведеної в розділі "Ідентифікатори" глави 5 стандарту Unicode, з деякими невеликими модифікаціями. Ідентифікатор - це ідентифікаційне ім'я, яке не є зарезервованим словом ( див. 7.6.1 ). Граматика ідентифікатора Unicode заснована як на нормативних, так і на інформаційних категоріях символів, визначених Стандартом Unicode. Символи у зазначених категоріях у версії 3.0 стандарту Unicode повинні розглядатися як у цих категоріях усіма відповідними реалізаціями ECMAScript. Цей стандарт визначає конкретні доповнення символів:

Знак долара ($) та підкреслення (_) дозволені в будь-якому місці IdentifierName .

Подальше прочитання можна знайти на веб-сайті : http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International - галузева асоціація, заснована в 1961 році і присвячена стандартизації інформаційно-комунікаційних технологій (ІКТ) та побутової електроніки (CE).


Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
TartanLlama

... @TartanLlama Якщо ви погіршили мою відповідь, будь ласка, прочитайте мою оновлену відповідь. Дякую.
Номіс

Хіба я не був! Я тільки позначив це.
TartanLlama

... нормально людині, яка це проголосувала, поясніть, будь ласка, чому і прочитайте мою відредаговану відповідь. Дякую.
Номіс

5
... @TartanLlama це просто доводить (знову), що функція Stackoverflows з анонімним пониженням функцій порушена. Відповідати на старі запитання із прийнятими відповідями для мене нормально, оскільки мені здається корисним бачити інші відповіді, коли я переглядаю відповіді.
Номіс

1

Під час використання 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, миттєво впізнавані, а код - читабельніший, і виключається подвійне / багаторазове обгортання $().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.