Почему переменная JavaScript должна начинаться со знака доллара?



Я довольно часто вижу JavaScript с переменными, которые начинаются со знака доллара. Когда / почему вы выбрали бы префикс переменной таким образом?

(Я не спрашиваю о $('p.foo') синтаксис, который вы видите в jQuery и других, но обычные переменные, такие как $name и $order)

193   16  

16 ответов:

очень распространенное использование в 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.

таким образом, знак $ теперь может свободно использоваться в именах переменных. Некоторые фреймворки и библиотеки имеют свои собственные соглашения о значении символа, отметил в другие ответы здесь.

как упоминали другие, знак доллара предназначен для использования механически сгенерированным кодом. Однако это соглашение было нарушено некоторыми дико популярными библиотеками JavaScript. JQuery, Prototype и MS AJAX (AKA Atlas) все используют этот символ в своих идентификаторах (или как полный идентификатор).

короче говоря, вы можете использовать $ когда вы хотите. (Переводчик не будет жаловаться.) Вопрос в том, когда вы хочу использовать его?

I лично я не использую его, но я думаю, что его использование действительно. Я думаю, что MS AJAX использует его для обозначения того, что функция является псевдонимом для более подробного вызова.

например:

var $get = function(id) { return document.getElementById(id); }

это кажется разумным соглашением.

в контексте AngularJS,$ префикс используется только для идентификаторов в коде платформы. Пользователям фреймворка рекомендуется не использовать его в своих собственных идентификаторах:

Угловые Пространства Имен $ и $$

чтобы предотвратить случайные столкновения имен с вашим кодом, угловые префиксы имен общедоступных объектов с $ и имена частных объектов с $$. Пожалуйста, не используйте $ или $$ префикс в код.

Источник:https://docs.angularjs.org/api

Stevo прав, значение и использование знака скрипта доллара (в 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 $$$$$"); }

все приведенные выше примеры будут работать.

попробовать их.

я был человеком, который создал эту конвенцию еще в 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 от A $(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. Это просто еще один допустимый символ в имени переменной, например a-z, A-Z, _, 0-9 и т. д...

С _ в начале имя переменной часто используется для указания частной переменной (или, по крайней мере, один предназначен для сохранения частной), я нахожу $ удобно для добавления перед моими собственными краткими псевдонимами в универсальные библиотеки кода.

например, при использовании jQuery, я предпочитаю использовать переменную $J (вместо $) и использовать $P при использовании php.js, etc.

префикс делает его визуально отличается от других переменных, таких как мой собственный статические переменные, заставляющие меня понять, что код является частью какой-то библиотеки или другой, и менее вероятно, что он будет конфликтовать или путать других, как только они узнают соглашение.

Он также не загромождает код (или требует дополнительного ввода), как и полностью указанное имя, повторяющееся для каждого вызова библиотеки.

мне нравится думать, что это похоже на то, что делают клавиши-модификаторы для расширения возможностей отдельных клавиш.

но это только мой собственный конвенция.

Как я испытал за последние 4 года, это позволит кому-то легко определить, указывает ли переменная на значение/объект или элемент DOM, завернутый в jQuery

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

в приведенном выше примере, когда я вижу переменную "$dataDiv", я могу легко сказать, что эта переменная указывает на элемент DOM, завернутый в jQuery (в данном случае это div). а также я могу вызвать все методы jQuery без обертывания объекта снова, как $dataDiv.добавлять(), $dataDiv.html (), $dataDiv.найти () вместо $($dataDiv).добавлять.)(

надеюсь, что это может помочь. поэтому, наконец, хочу сказать, что это будет хорошая практика, чтобы следовать этому, но не обязательно.

хотя вы можете просто использовать его для префикса ваших идентификаторов, он должен использоваться для сгенерированного кода, например, для замены токенов в шаблоне.

${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 name-conventions с переменными javascript: При выполнении проверки ввода я хочу запускать одни и те же алгоритмы на стороне клиента, и на стороне сервера. Я действительно хочу, чтобы обе стороны кода выглядели как можно более похожими, чтобы упростить обслуживание. Использование знаков доллара в именах переменных упрощает эту задачу.

(кроме того, некоторые разумные вспомогательные функции помогают сделать код похожим, например, обертывание input-value-lookups, версии без OO strlen, substr, так далее. Он все равно требует ручной настройки.)

допустимый идентификатор JavaScript shuold должен начинаться с буквы, подчеркивания ( _ ) или знак доллара ($); последующие символы также могут быть цифрами (0-9). Потому что JavaScript чувствителен к регистру, буквы включите символы " A "через" Z " (верхний регистр) и символы " a "через" z " (нижний регистр).

Details:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables

    Ничего не найдено.

Добавить ответ:
Отменить.