Я досить часто бачу JavaScript зі змінними, які починаються зі знака долара. Коли / чому ви вирішили таким чином префікс змінної?
(Я не запитую про $('p.foo')
синтаксис, який ви бачите в jQuery та інших, але звичайні змінні, як $name
і $order
)
Я досить часто бачу JavaScript зі змінними, які починаються зі знака долара. Коли / чому ви вирішили таким чином префікс змінної?
(Я не запитую про $('p.foo')
синтаксис, який ви бачите в jQuery та інших, але звичайні змінні, як $name
і $order
)
Відповіді:
Дуже поширене використання jQuery - це відрізняти об'єкти jQuery, що зберігаються у змінних, від інших змінних.
Наприклад, я визначив би:
var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself
Я вважаю це дуже корисним у написанні коду jQuery і полегшує перегляд об’єктів jQuery, які мають інший набір властивостей.
У 1-му, 2-му та 3-му виданні ECMAScript використання імен змінних $ -префіксів явно відмовляло специфіці, за винятком контексту автогенерованого коду:
Знак долара (
$
) та підкреслення (_
) дозволені в будь-якому місці ідентифікатора. Знак долара призначений для використання тільки в механічно створеному коді.
Однак у наступній версії ( 5-е видання , яке є чинним) це обмеження було скасовано, а вищезазначений уривок замінено на
Знак долара (
$
) та підкреслення (_
) дозволені в будь-якому місці IdentifierName .
Таким чином, знак $ тепер може вільно використовуватися в назвах змінних. Певні рамки та бібліотеки мають власні умовності щодо значення символу, зазначені в інших відповідях тут.
$variable
, це, ймовірно, тому, що він містить цілий об’єкт jQuery.
Як уже згадували інші, знак долара призначений для використання механічно згенерованого коду. Однак ця конвенція була порушена деякими популярними бібліотеками JavaScript. JQuery, Prototype та MS AJAX (AKA Atlas) використовують цей символ у своїх ідентифікаторах (або як цілий ідентифікатор).
Коротше кажучи, ви можете використовувати $
коли завгодно. (Перекладач не скаржиться.) Питання полягає в тому, коли ви хочете ним скористатися?
Я особисто не користуюся ним, але думаю, що його використання справедливе. Я думаю, що MS AJAX використовує це для позначення того, що функція є псевдонімом для деяких більш багатослівних викликів.
Наприклад:
var $get = function(id) { return document.getElementById(id); }
Це здається розумною умовою.
У контексті AngularJS $
префікс використовується лише для ідентифікаторів у коді фреймворку. Користувачам фреймворку доручається не використовувати його у власних ідентифікаторах:
Кутові простори імен
$
та$$
Щоб запобігти випадковим зіткненням імен з вашим кодом, кутові префікси назви загальнодоступних об'єктів із
$
та назви приватних об’єктів$$
. Будь ласка, не використовуйте$
або$$
префікс у своєму коді.
Джерело: https://docs.angularjs.org/api
Я був людиною, яка створила цю конвенцію ще в 2006 році і просунула її в ранньому списку розсилки jQuery, тому дозвольте мені поділитися деякою історією та мотивацією навколо неї.
Прийнята відповідь дає такий приклад:
var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself
Але це насправді це не добре ілюструє. Навіть без цього у $
нас все одно будуть два різні назви змінних, email
і email_field
. Це дуже добре там. Чому нам потрібно вписатись $
в одне з імен, коли у нас вже є два різні імена?
Насправді, я б не використовував email_field
тут дві причини: names_with_underscores
не є ідіоматичним JavaScript і field
насправді не має сенсу для елемента DOM. Але я дотримувався тієї ж ідеї.
Я спробував кілька різних речей, серед них щось дуже схоже на приклад:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
(Звичайно, об’єкт jQuery може мати більше одного елемента DOM, але код, над яким я працював, мав багато id
селекторів, тому в цих випадках було відповідність 1: 1.)
У мене був інший випадок, коли функція отримала елемент DOM як параметр і для цього також потрібен об’єкт jQuery:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var emailJQ = $(email);
// Now email is the DOM element and emailJQ is a jQuery object for it
}
Ну це трохи заплутано! В одному з моїх бітів коду email
є об'єктом jQuery і emailElement
є елементом DOM, а в іншому email
- елементом DOM і emailJQ
є об'єктом jQuery.
Консистенції не було, і я продовжував їх перемішувати. Плюс до цього було неприємно, що потрібно складати два різних імені для однієї речі: одне для об’єкта jQuery та інше для відповідного елемента DOM. Крім того email
, emailElement
і, і emailJQ
я намагався також пробувати інші варіанти.
Тоді я помітив загальну схему:
var email = $("#email");
var emailJQ = $(email);
Оскільки JavaScript трактує $
як ще одну букву для імен, і оскільки я завжди отримував об'єкт jQuery від $(whatever)
виклику, шаблон нарешті осяяв мене. Я міг би $(...)
зателефонувати і просто видалити деякі символи, і це придумає досить гарне ім'я:
$
("#email")$
(email)
Закреслення не є ідеальним, але ви можете отримати ідею: коли деякі символи видалені, обидва ці рядки в кінці виглядають так:
$email
Тоді я зрозумів, що мені не потрібно складати конвенцію на кшталт emailElement
або emailJQ
. На мене вже дивився приємний конвент: вийміть декількох персонажів з $(whatever)
дзвінка, і він перетвориться на $whatever
.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
і:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var $email = $(email);
// $email is the jQuery object and email is the DOM object
// Same names as in the code above. Yay!
}
Тому мені не довелося постійно складати два різних імена, але я міг просто використовувати те саме ім'я з $
префіксом або без нього . І $
префікс був приємним нагадуванням про те, що я маю справу з об’єктом jQuery:
$('#email').click( ... );
або:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );
Право Стево, значення та використання знака скрипта долара (у Javascript та платформі jQuery, але не в PHP) є абсолютно семантичним. $ - символ, який може використовуватися як частина імені ідентифікатора. Крім того, знак долара - це, мабуть, не сама «дивна» річ, з якою ви можете зіткнутися в Javascript. Ось кілька прикладів дійсних імен ідентифікаторів:
var _ = function() { alert("hello from _"); }
var \u0024 = function() { alert("hello from $ defined as u0024"); }
var Ø = function() { alert("hello from Ø"); }
var $$$$$ = function() { alert("hello from $$$$$"); }
Усі наведені вище приклади спрацюють.
Спробуйте їх.
Символ $ не має особливого значення для двигуна JavaScript. Це просто ще один дійсний символ у назві змінної типу az, AZ, _, 0-9 тощо.
$
не має особливого значення в JavaScript. Період.
Оскільки _
на початку ім'я змінної часто використовується для вказівки приватної змінної (або принаймні однієї, призначеної залишатися приватною), мені здається $
зручним для додавання перед власними короткими псевдонімами до загальних бібліотек коду.
Наприклад, при використанні jQuery я вважаю за краще використовувати змінну $J
(а не просто $
) та використовувати $P
php.js тощо.
Префікс його візуально відрізняє від інших змінних, таких як мої власні статичні змінні, втягуючи мене в те, що код є частиною якоїсь бібліотеки чи іншої, і менше шансів конфліктувати чи плутати інших, коли вони знають умову.
Він також не захаращує код (або вимагає додаткового набору тексту), як і повністю вказане ім'я, що повторюється для кожного виклику бібліотеки.
Мені подобається вважати це подібним до того, що клавіші-модифікатори роблять для розширення можливостей окремих клавіш.
Але це лише моя власна умова.
Як я відчував протягом останніх 4 років, це дозволить комусь легко визначити, чи змінна, що вказує на значення / об'єкт, або на JQuery, обгорнутий елемент DOM
Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};
var $dataDiv = $('#myDataDiv');
у наведеному вище прикладі, коли я бачу змінну "$ dataDiv", я можу легко сказати, що ця змінна вказує на обернутий в JQuery елемент DOM (в даному випадку це div). а також я можу викликати всі методи jQuery, щоб знову обернути об'єкт, як $ dataDiv.append (), $ dataDiv.html (), $ dataDiv.find () замість $ ($ dataDiv) .append ().
Сподіваюся, це може допомогти. тому, нарешті, хочу сказати, що це буде вдалою практикою слідувати цьому, але не обов'язково.
${varname}
- це лише умова іменування, яке розробники jQuery використовують для розрізнення змінних, що містять елементи jQuery.
Звичайна {varname}
використовується для зберігання загальних матеріалів, таких як тексти та рядки.
${varname}
містить елементи, повернуті з jQuery.
Ви також можете використовувати звичайний {varname}
елемент для зберігання jQuery елементів, але, як я вже говорив на початку, це відрізняє його від простих змінних і робить його набагато легшим для розуміння (уявіть, що плутати його за звичайну змінну і шукати в усьому світі, щоб зрозуміти, що вона містить) .
Наприклад :
var $blah = $(this).parents('.blahblah');
Тут бла зберігає повернений елемент jQuery.
Отже, коли хтось ще побачить $blah
код у коді, він зрозуміє, що це не просто рядок або число, це елемент jQuery.
Хоча ви можете просто використовувати його для префіксації своїх ідентифікаторів, він повинен використовуватися для генерованого коду, наприклад, заміни жетонів у шаблоні, наприклад.
Кутове використання - це властивості, породжені рамкою. Здогадайтесь, вони йдуть за (на даний момент неіснуючим) натяком, наданим ECMA-262 3.0.
$ використовується для розмежування загальних змінних та змінних jquery у разі звичайних змінних. дозвольте розмістити замовлення у FLIPKART, тоді якщо замовлення є змінною, яка показує вам рядок виводу, то воно називається простим як "order", але якщо ми натискаємо на порядок місця, то повертається об'єкт, цей об'єкт буде позначатися $ як "$ порядку ", щоб програміст міг викривити змінні javascript і jquery змінні у всьому коді.
Якщо ви бачите знак долара ($) або подвійний знак долара ($$) і хочете цікаво, що це означає в рамках прототипу, ось ваша відповідь:
$$('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
Причина, по якій я іноді використовую php-імена із змінними javascript: Під час перевірки вводу я хочу запускати такі самі алгоритми як на стороні клієнта, так і на сервері. Я дуже хочу, щоб дві сторони коду виглядали максимально схоже, щоб спростити технічне обслуговування. Використання знаків долара у назвах змінних полегшує це.
(Крім того, деякі розумні допоміжні функції допомагають зробити код схожим, наприклад, перенесення вхідних значень-пошуку, не-OO версій strlen, substr тощо. Хоча це все ще потребує певного налаштування вручну.)
Дійсний ідентифікатор JavaScript повинен починатися з літери, підкреслення (_) або знака долара ($); наступні символи також можуть бути цифрами (0-9). Оскільки JavaScript відрізняється великими літерами, літери включають символи «А» до «Z» (пропис) та символи «а» через «z» (малі літери).
Детальніше:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables