Що означає знак "$" у JavaScript


167

У наведеному нижче коді JavaScript є знак долара ( $). Що це означає?

$(window).bind('load', function() {
    $('img.protect').protectImage();
});

1
Дивіться також: stackoverflow.com/a/553734/43615 (Чому змінна JavaScript починається зі знака долара?)
Thomas Tempelmann

Відповіді:


284

Ваш фрагмент коду виглядає так, що він посилається на методи однієї з популярних бібліотек JavaScript (jQuery, ProtoType, mooTools тощо).

Немає нічого загадкового у використанні $JavaScript. $просто дійсний ідентифікатор JavaScript.

JavaScript дозволяє використовувати верхні та нижні літери, цифри та $та _. Це $призначене для використання для машинних змінних (таких як $0001).

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


2
@ Паоло: Не впевнений, що саме ти маєш на увазі. (Я вважаю, що раніше це було прийнято.) Я подумав, що принаймні правильний. Сюди входить трохи додаткової інформації, але я не впевнений, що це виправдовує "багато" ...
Noldorin

1
@Noldorin: допоміжна інформація - це гарна річ. У вашому запитання абсолютно не згадувалося про причину використання $, про причину його використання, а також про те, що jQuery - це лише одна з багатьох бібліотек, які її використовують. Отримати це як прийняту відповідь означає, що це найкраща відповідь на питання, а це не було.
Паоло Бергантіно

+1 Це дійсний дійсний ідентифікатор JavaScript, який часто використовується рамками JavaScript як другий псевдонім.
Gumbo

@ Паоло: Часто так. Однак не було жодних ознак, які ОП хотіла знати про це. Пряма відповідь - також гарна річ. :) Сказавши це, я би погодився, це краща відповідь. Мій єдиний каламбур був з акцентом, який ви зробили на певну точку.
Нолдорін

2
До речі, я подав трохи історії за функцією $ у своєму дописі тут: stackoverflow.com/questions/1122690/jquery-and-questions/…
SolutionYogi

44

З іншої відповіді :

Трохи історії

Пам’ятайте, нічого принципового в цьому немає $. Це ім'я змінної, як і будь-яке інше. Раніше люди писали код за допомогою document.getElementById. Оскільки JavaScript відрізняється від регістру, було нормально помилятися під час написання document.getElementById. Повинен чи я капітал 'b'з 'by'? Чи повинен я капітал 'i'з Id?вас отримати дрейф. Оскільки функції JavaScript є першокласними в JavaScript, ви завжди можете це зробити:

var $ = document.getElementById; //freedom from document.getElementById!

Коли бібліотека прототипів прибула, вони назвали свою функцію, яка отримує елементи DOM, як '$'. Майже всі бібліотеки JavaScript скопіювали цю ідею. Прототип також ввів $$функцію вибору елементів за допомогою селектора CSS.

jQuery також адаптував $функцію, але розширений, щоб змусити її приймати всі види "селекторів", щоб отримати потрібні елементи. Тепер, якщо ви вже використовуєте Prototype у своєму проекті і хочете включити jQuery, у вас виникне проблема, оскільки '$'можна було б посилатися на реалізацію прототипу АБО на реалізацію jQuery. Ось чому jQuery має можливість noConflict, щоб ви могли включити jQuery у свій проект, який використовує прототип і повільно мігрує ваш код. Я думаю, що це був геніальний хід з боку Джона! :)


10
var $ = document.getElementById;не працює в Firefox або Google Chrome. Ви повинні використовувати function $(id) { return document.getElementById(id); }замість цього. Див. Stackoverflow.com/questions/1007340 для отримання додаткової інформації.
Грант Вагнер

Я цього не знав, дякую Грант. Я можу підтвердити, що це працювало в IE6, а також у Firefox 2, оскільки я часто використовував цю методику. Я оновлю своє основне повідомлення.
SolutionYogi

42

Це, швидше за все, код jQuery (точніше, JavaScript за допомогою бібліотеки jQuery).

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


3
Слід додати , що $ це так само , як х, це може бути що завгодно , присвоєним йому
HASEN

Що означає цей фрагмент коду: $ input.prop ('type') == 'radio';
OKGimmeMoney

21

Як говорять всі інші відповіді; це може бути майже все, але зазвичай це "JQuery".

Однак у ES6 це оператор інтерполяції рядків у шаблоні "буквально", наприклад.

var s = "new" ; // you can put whatever you think appropriate here.
var s2 = `There are so many ${s} ideas these days !!` ; //back-ticks not quotes
console.log(s2) ;

результат:

У нас сьогодні так багато нових ідей !!


2
Це корисна відповідь! Це я шукав, бо знав, що у нас немає jQuery чи будь-якої іншої бібліотеки. Це в основному спосіб друку змінної всередині більшого рядка без використання лапок та знаків плюс
Оскар Браво


4

Окрім наведених вище відповідей, $не має особливого значення у javascript, його вільно використовувати в іменуванні об’єктів. В JQuery , він просто використовується в якості псевдоніма для JQuery об'єкта і JQuery () функції. Однак ви можете зіткнутися з ситуаціями, коли ви хочете використовувати його спільно з іншою бібліотекою JS, яка також використовує $, що призведе до конфлікту імен. Існує спосіб в JQuery тільки з цієї причини jQuery.noConflict().

Ось зразок з документів jQuery :

<script src="other_lib.js"></script>
<script src="jquery.js"></script>
<script>
$.noConflict();
// Code that uses other library's $ can follow here.
</script>

Крім того, ви можете також використовувати подібний

(function ($) {
// Code in which we know exactly what the meaning of $ is
} (jQuery));

Реф : https://api.jquery.com/jquery.noconflict/


3

З документації jQuery, що описує основний об'єкт jQuery :

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

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