JavaScript 변수가 달러 기호로 시작하는 이유는 무엇입니까?
달러 기호로 시작하는 변수가있는 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 객체를 쉽게 볼 수 있도록합니다.
ECMAScript 의 1, 2, 3 판에서 $ 접두어가 붙은 변수 이름을 사용하는 것은 자동 생성 코드의 컨텍스트를 제외하고 사양에 의해 명시 적으로 권장되지 않습니다.
달러 기호 (
$
)와 밑줄 (_
)은 식별자 어디에서나 허용됩니다. 달러 기호는 기계적으로 생성 된 코드에서만 사용하기위한 것입니다.
그러나 다음 버전 ( 현재 의 5 판 )에서는이 제한이 삭제되었고 위의 구절이
달러 기호 (
$
) 및 밑줄 (_
)은 IdentifierName의 모든 위치에서 허용됩니다 .
따라서 $ 기호는 이제 변수 이름에 자유롭게 사용할 수 있습니다. 특정 프레임 워크 및 라이브러리에는 여기의 다른 답변에 언급 된 기호의 의미에 대한 고유 한 규칙이 있습니다.
다른 사람들이 언급했듯이 달러 기호는 기계적으로 생성 된 코드에서 사용하기위한 것입니다. 그러나이 규칙은 널리 사용되는 일부 JavaScript 라이브러리에 의해 깨졌습니다. JQuery, Prototype 및 MS AJAX (AKA Atlas)는 모두이 문자를 식별자 (또는 전체 식별자)에 사용합니다.
요컨대 $
원할 때마다 사용할 수 있습니다 . (인터프리터는 불평하지 않습니다.) 질문은 당신이 할 때 원하는 그것을 사용할 수 있나요?
개인적으로는 사용하지 않지만 사용이 타당하다고 생각합니다. MS AJAX는 함수가 좀 더 자세한 호출에 대한 별칭임을 나타 내기 위해이를 사용한다고 생각합니다.
예를 들면 :
var $get = function(id) { return document.getElementById(id); }
그것은 합리적인 관습처럼 보입니다.
AngularJS 컨텍스트에서 $
접두사는 프레임 워크 코드의 식별자에만 사용됩니다. 프레임 워크 사용자는 자신의 식별자에 프레임 워크를 사용하지 않도록 지시받습니다.
Angular 네임 스페이스
$
및$$
코드와 우발적 인 이름 충돌을 방지하기 위해 Angular는 공용 개체의
$
이름에$$
. 코드에$
또는$$
접두사를 사용하지 마십시오 .
출처 : 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
관용적 인 자바 스크립트 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);
Since JavaScript treats $
as simply another letter for names, and since I always got a jQuery object back from a $(whatever)
call, the pattern finally dawned on me. I could take a $(...)
call and just remove some characters, and it would come up with a pretty nice name:
$
("#email")$
(email)
Strikeout isn't perfect, but you may get the idea: with some characters deleted, both of those lines end up looking like:
$email
That's when I realized I didn't need to make up a convention like emailElement
or emailJQ
. There was already a nice convention staring at me: take some characters out of a $(whatever)
call and it turns into $whatever
.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
and:
// 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!
}
So I didn't have to make up two different names all the time but could just use the same name with or without a $
prefix. And the $
prefix was a nice reminder that I was dealing with a jQuery object:
$('#email').click( ... );
or:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );
Stevo is right, the meaning and usage of the dollar script sign (in Javascript and the jQuery platform, but not in PHP) is completely semantic. $ is a character that can be used as part of an identifier name. In addition, the dollar sign is perhaps not the most "weird" thing you can encounter in Javascript. Here are some examples of valid identifier names:
var _ = function() { alert("hello from _"); }
var \u0024 = function() { alert("hello from $ defined as u0024"); }
var Ø = function() { alert("hello from Ø"); }
var $$$$$ = function() { alert("hello from $$$$$"); }
All of the examples above will work.
Try them.
The $ character has no special meaning to the JavaScript engine. It's just another valid character in a variable name like a-z, A-Z, _, 0-9, etc...
Since _
at the beginning of a variable name is often used to indicate a private variable (or at least one intended to remain private), I find $
convenient for adding in front of my own brief aliases to generic code libraries.
For example, when using jQuery, I prefer to use the variable $J
(instead of just $
) and use $P
when using php.js, etc.
The prefix makes it visually distinct from other variables such as my own static variables, cluing me into the fact that the code is part of some library or other, and is less likely to conflict or confuse others once they know the convention.
It also doesn't clutter the code (or require extra typing) as does a fully specified name repeated for each library call.
I like to think of it as being similar to what modifier keys do for expanding the possibilities of single keys.
But this is just my own convention.
As I have experienced for the last 4 years, it will allow some one to easily identify whether the variable pointing a value/object or a jQuery wrapped DOM element
Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};
var $dataDiv = $('#myDataDiv');
in the above example when I see the variable "$dataDiv" i can easily say that this variable pointing to a jQuery wrapped DOM element (in this case it is div). and also I can call all the jQuery methods with out wrapping the object again like $dataDiv.append(), $dataDiv.html(), $dataDiv.find() instead of $($dataDiv).append().
Hope it may helped. so finally want to say that it will be a good practice to follow this but not mandatory.
While you can simply use it to prefix your identifiers, it's supposed to be used for generated code, such as replacement tokens in a template, for example.
${varname}
is just a naming convention jQuery developers use to distinguish variables that are holding jQuery elements.
Plain {varname}
is used to store general stuffs like texts and strings. ${varname}
holds elements returned from jQuery.
You can use plain {varname}
to store jQuery elements as well, but as I said in the beginning this distinguishes it from the plain variables and makes it much easier to understand (imagine confusing it for a plain variable and searching all over to understand what it holds).
For example :
var $blah = $(this).parents('.blahblah');
Here, blah is storing a returned jQuery element.
So, when someone else see the $blah
in the code, they'll understand it's not just a string or a number, it's a jQuery element.
Angular uses is for properties generated by the framework. Guess, they are going by the (now defunct) hint provided by the ECMA-262 3.0.
$ is used to DISTINGUISH between common variables and jquery variables in case of normal variables. let you place a order in FLIPKART then if the order is a variable showing you the string output then it is named simple as "order" but if we click on place order then an object is returned that object will be denoted by $ as "$order" so that the programmer may able to snip out the javascript variables and jquery variables in the entire code.
If you see the dollar sign ($) or double dollar sign ($$), and are curious as to what this means in the Prototype framework, here is your answer:
$$('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'
Source:
http://www.prototypejs.org/api/utility/dollar-dollar
A valid JavaScript identifier shuold must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase).
Details:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables
The reason I sometimes use php name-conventions with javascript variables: When doing input validation, I want to run the exact same algorithms both client-side, and server-side. I really want the two side of code to look as similar as possible, to simplify maintenance. Using dollar signs in variable names makes this easier.
(Also, some judicious helper functions help make the code look similar, e.g. wrapping input-value-lookups, non-OO versions of strlen,substr, etc. It still requires some manual tweaking though.)
참고URL : https://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign
'Nice programing' 카테고리의 다른 글
Android Studio : jar를 라이브러리로 추가 하시겠습니까? (0) | 2020.09.27 |
---|---|
Android Studio에서 "Android SDK를 선택"하려면 어떻게합니까? (0) | 2020.09.27 |
두 날짜 (일수)의 차이를 계산 하시겠습니까? (0) | 2020.09.27 |
Android에서 경고 대화 상자를 표시하려면 어떻게합니까? (0) | 2020.09.27 |
git 브랜치 이름을 지정하는 데 일반적으로 사용되는 관행의 예는 무엇입니까? (0) | 2020.09.27 |