JavaScript 변수가 달러 기호로 시작하는 이유는 무엇입니까? [복제]


1036

달러 기호로 시작하는 변수가있는 JavaScript를 자주 볼 수 있습니다. 이런 식으로 변수 접두사를 언제 / 왜 선택 하시겠습니까?

(I 대해 묻는 게 아니에요 $('p.foo')당신이 jQuery를 다른 사람에서 볼 수 있다는 구문하지만 일반 변수는 같은 $name$order)


16
아마도 Perl 프로그래밍에서 얻은 습관 일 것입니다. (편집 : 또는 PHP)
18

5
PHP 또는 Perl과 같은 일부 언어에는 필요합니다. 개발자가 자바 스크립트에 필요하지 않다는 것을 기억하지 못했을 것입니다.
Rich Bradshaw

3
또는 그들은 습관을 버리고 귀찮게하고 싶지 않았습니다. 자신의 웹 페이지를 함께 해킹하는 많은 개발자가 PHP와 자바 스크립트를 사용하여 그렇게하기 때문에 정답 일 가능성이 높습니다.
BlueRaja-대니 Pflughoeft

@DonaldDuck 나는 당신이 당신의 복제본이 잘못된 길을 가지고 있다고 생각합니다-이것은 귀하의 링크보다 7 개월 더 오래되었습니다
Ken

1
@Ken 이 답변 에 따르면 , 그것은 나이가 중요하지 않지만 대답이 얼마나 좋은지입니다. 나는 개인적으로 다른 질문에 대한 답변이 더 낫다고 생각하기 때문에이 질문을 중복으로 닫기로 투표했습니다. 이 답변에 대한 답변이 더 낫다고 생각되면 다른 답변을 복제하여 투표를 종료 할 수 있습니다.
Donald Duck

답변:


1419

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 객체를 쉽게 볼 수있게합니다 .


98
이것은 실제 헝가리어 표기법입니다. 변수 이름보다 변수에 저장된 내용에 대한 정보를 전달합니다. A ++는 다시 헝가리에요.
Artemis

2
jquery 문서 에도이 표기법이 사용되기를 바랍니다 ... 실제로 도움이됩니다.
pedromanoel

1
@Artemis 저는 거의 20 년 전에 헝가리어를 집어 들고 사용을 중단 한 적이 없었습니다. 수년에 걸쳐 많은 사람들이 그것을 사용하는 것에 대해 큰 불만을 표명했지만 그 이유를 이해할 수없는 것이 도움이됩니다.
Night Owl

10
$에 대해 엄지 손가락. 그러나 변수 이름의 밑줄은 방지해야하며 일반적인 JS 변수는 camelCase를 사용해야합니다. email_fields-> emailField. _의 유효한 유스 케이스 만 개인 / 보호 된 특성의 접 두부로 사용됩니다.
cschuff

11
@cschuff 이것은 매우 성명입니다 ... 모든 지역 변수에 밑줄을 선호하고 프로토 타입 객체의 속성에 낙타 사례를 예약하십시오.
Paul

250

ECMAScript 의 1 , 2 3 판에서 $ 접두사 변수 이름을 사용하는 것은 자동 생성 코드의 컨텍스트를 제외하고 사양에 의해 명시 적으로 권장되지 않습니다.

달러 기호 ( $)와 밑줄 ( _)은 식별자의 어느 곳에 나 허용됩니다. 달러 기호는 기계적으로 생성 된 코드에서만 사용하기위한 것입니다.

그러나 다음 버전 (현재 5 판 )에서는이 제한이 없어지고 위의 내용은

달러 기호 ( $)와 밑줄 ( _)은 IdentifierName의 어느 곳에서나 허용됩니다 .

따라서 $ 기호를 변수 이름에 자유롭게 사용할 수 있습니다. 특정 프레임 워크 및 라이브러리에는 심볼의 의미에 대한 자체 규칙이 있으며 여기에 다른 답변에 언급되어 있습니다.


3
이것이 사실이지만 OP의 질문에 대답하는 데 실제로 도움이됩니까? 현재 허용되는 답변이 더 좋습니다. 초보자 JS 프로그래머가 볼 때 $variable전체 jQuery 객체를 포함하고 있기 때문일 수 있습니다.
rinogo

14
@rinogo 그것은 사용 된 라이브러리에 대한 가정에 의존하지 않는 절대적인 진실로 질문에 대답합니다.
Oriol

1
@yoyo_fun : 사람이 아닌 컴퓨터에서 생성하는 코드.
cic


3
"그것은 절대적인 진실로 질문에 답한다". 사실, 개발자는 언어 사양 에서이 발언을 완전히 무시하고 있었으며 아마도 여전히 그렇습니다. :)
Stijn de Witt

61

다른 사람들이 언급했듯이 달러 기호는 기계적으로 생성 된 코드에 사용됩니다. 그러나이 규칙은 널리 사용되는 일부 JavaScript 라이브러리에 의해 손상되었습니다. JQuery, 프로토 타입 및 MS AJAX (AKA Atlas)는 모두이 문자를 식별자 (또는 전체 식별자)로 사용합니다.

요컨대 $원하는 때마다 사용할 수 있습니다 . (인터프리터는 불평하지 않습니다.) 질문은 당신이 할 때 원하는 그것을 사용할 수 있나요?

나는 개인적으로 사용하지 않지만 그 사용은 유효하다고 생각합니다. MS AJAX는이 기능을 사용하여 함수가 좀 더 자세한 호출의 별칭임을 나타냅니다.

예를 들면 다음과 같습니다.

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

그것은 합리적인 협약처럼 보입니다.


JQuery는 이것을 식별자에서 사용하지 않습니다. $ .X가 더 적은 유형을 입력해야하는 이유-jQuery.X는 동일합니다. 실제로 $ .X는 jQuery.X의 네임 스페이스 별칭입니다. 모든 jQuery 기능은 jQuery-ns, $이 아님
specializt

5
5 년 전에 "또는 전체 식별자"라고 말한 것처럼 @specializt. 식별자로 나는 언어의 키워드가 아닌 어휘 토큰 인 표준 CS 정의를 의미합니다. 이 경우 $와 jQuery는 동일한 값을 참조하는 두 개의 다른 식별자입니다. 그럼에도 불구하고 둘 다 식별자입니다.
Benry

56

AngularJS와 관련하여 $접두사는 프레임 워크 코드의 식별자에만 사용됩니다. 프레임 워크 사용자는 자신의 식별자에 프레임 워크를 사용하지 않아야합니다.

각도 네임 스페이스 $$$

실수로 코드와 이름이 충돌하는 것을 방지하기 위해 Angular는 공용 객체 이름 앞에 $개인 객체 이름을 접두어로 붙입니다 $$. 코드에서 $또는 $$접두사를 사용하지 마십시오 .

출처 : https://docs.angularjs.org/api


35

저는 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 요소이며 emailJQjQuery 객체입니다.

일관성이 없었고 계속 섞었습니다. 또한 같은 것에 대해 두 가지 다른 이름을 유지 해야하는 것은 약간의 성가신 일입니다. 하나는 jQuery 객체와 다른 하나는 일치하는 DOM 요소입니다. 게다가 email, emailElement그리고 emailJQ, 나도 다른 변화를 시도하고 있었다.

그런 다음 일반적인 패턴을 발견했습니다.

var email = $("#email");
var emailJQ = $(email);

JavaScript는 $단순히 이름을 나타내는 또 다른 문자로 취급 되며 항상 $(whatever)호출 에서 jQuery 객체를 다시 가져 왔기 때문에 패턴이 마침내 떠 올랐 습니다. 나는 걸릴 수 있습니다 $(...)전화를 그냥 몇 가지 문자를 제거하고, 꽤 좋은 이름을 가지고 올 것입니다 :

$("#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( ... );

21

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 $$$$$"); }

위의 모든 예제가 작동합니다.

사용해보십시오.


7

$ 문자는 JavaScript 엔진에 특별한 의미가 없습니다. az, AZ, _, 0-9 등과 같은 변수 이름의 또 다른 유효한 문자입니다.


2
사실이지만 요청 된 내용은 아닙니다. 나는 그것이 왜 사용되었는지 이해하기 위해 여기에 왔으며 그것을 보았던 경우는 dom 객체를 포함하는 var 사이에 jquery 객체를 포함하는 var를 식별하는 것으로 보입니다.
rtpHarry

3
@rtpHarry 당신은 질문을 한 사람이 아니며 "왜"라는 질문이 여기에 적절하게 대답되었습니다. 질문에 명시된 것처럼 JQuery와는 아무런 관련이 없습니다. 사실, 위의 대답은 질문에 가장 적합하다고 생각합니다. 때로는 가장 작은 대답이 필요한 것을 파악하려는 경우 $JavaScript에서 특별한 의미가 없습니다. 기간.
amn

특정 .. ahem ... 사람들은 변수 이름에 달러 기호를 추가하여 사물을 더 각도처럼 보이게 만들고 싶습니다.
글리프

2

_변수 이름의 시작 부분에서 개인 변수를 나타내는 데 종종 사용 되기 때문에 (또는 적어도 개인용으로 유지하기 위해 하나 이상), $일반 코드 라이브러리에 간단한 별칭 앞에 추가하는 것이 편리합니다.

예를 들어 jQuery를 사용할 때는 변수 $J대신 (단지 대신 $) 변수를 사용하고 $Pphp.js 등을 사용할 때 선호합니다 .

접두어는 내 정적 변수와 같은 다른 변수와 시각적으로 구별되어 코드가 일부 라이브러리 또는 기타의 일부라는 사실을 깨닫게하고 규칙을 알고 나면 다른 사람들과 충돌하거나 혼동하지 않습니다.

또한 각 라이브러리 호출에 대해 완전히 지정된 이름이 반복되는 것처럼 코드를 복잡하게 만들거나 추가 입력이 필요하지 않습니다.

단일 키의 가능성을 확장하기 위해 수정 자 키가하는 것과 비슷한 것으로 생각합니다.

그러나 이것은 단지 내 자신의 협약입니다.


2

지난 4 년 동안 경험 한 것처럼 변수를 사용하여 변수가 값 / 객체를 가리키는 지 jQuery 래핑 된 DOM 요소인지 쉽게 식별 할 수 있습니다.

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

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

위의 예에서 변수 "$ dataDiv"가 표시되면이 변수가 jQuery 래핑 된 DOM 요소 (이 경우에는 div 임)를 가리키는 것으로 쉽게 말할 수 있습니다. 또한 $ ($ dataDiv) .append () 대신 $ dataDiv.append (), $ dataDiv.html (), $ dataDiv.find ()와 같이 객체를 다시 래핑하지 않고 모든 jQuery 메소드를 호출 할 수 있습니다.

도움이 되길 바랍니다. 마지막으로 이것을 따르는 것이 좋지만 의무 사항은 아니라고 말하고 싶습니다.


0

${varname} jQuery 개발자가 jQuery 요소를 보유하고있는 변수를 구별하기 위해 사용하는 명명 규칙입니다.

일반 {varname}은 텍스트 및 문자열과 같은 일반적인 내용을 저장하는 데 사용됩니다. ${varname}jQuery에서 반환 된 요소를 보유합니다.

일반 {varname}을 사용 하여 jQuery 요소를 저장할 수도 있지만 처음에 말했듯이 일반 변수와 구별하여 이해하기가 훨씬 쉽습니다 (일반 변수와 혼동하고 보유하고있는 것을 이해하기 위해 모든 것을 검색한다고 상상해보십시오) .

예를 들면 다음과 같습니다.

var $blah = $(this).parents('.blahblah');

여기서, blah는 리턴 된 jQuery 요소를 저장합니다.

따라서 다른 사람 $blah이 코드에서를 볼 때 문자열이나 숫자가 아니라 jQuery 요소라는 것을 이해할 것입니다.


6
6 년 전의 답변을 그대로 해석했습니다.
Ken

나는 그것이 "저품질"이라고 대답하지 않는다고 생각합니다.
Sunny R Gupta

-1

식별자를 접두사로 사용하기 만하면되지만, 예를 들어 템플릿의 대체 토큰과 같은 생성 된 코드에 사용됩니다.


1
6 년 전만해도 더 이상은 아닙니다.
Mark Amery

-2

각도 사용은 프레임 워크에서 생성 된 속성에 사용됩니다. 그들은 ECMA-262 3.0에서 제공하는 (현재 기능이없는) 힌트로 가고 있다고 생각합니다.


-3

$는 일반 변수의 경우 공통 변수와 jquery 변수를 구별하는 데 사용됩니다. FLIPKART에 주문을 한 다음 주문이 문자열 출력을 표시하는 변수 인 경우 "order"로 간단하게 이름이 지정되지만 place order를 클릭하면 객체가 반환되고 해당 객체는 $로 "$로 표시됩니다. 프로그래머가 자바 스크립트 변수와 jquery 변수를 전체 코드에서 스니핑 할 수 있습니다.


-4

달러 기호 ($) 또는 이중 달러 기호 ($$)가 표시되고 프로토 타입 프레임 워크에서 이것이 무엇을 의미하는지 궁금한 경우 다음과 같이 답하십시오.

$$('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


5
OP는 특히이 형식의 달러 접두사에 대해 묻지 않고 있다고 말합니다.
Nigel Alderton

-5

때로는 자바 스크립트 변수와 함께 PHP 이름-컨벤션을 사용하는 이유 : 입력 유효성 검사를 수행 할 때 클라이언트 측과 서버 측 모두에서 동일한 알고리즘을 실행하고 싶습니다. 유지 보수를 단순화하기 위해 코드의 양면이 가능한 한 비슷하게 보이기를 원합니다. 변수 이름에 달러 기호를 사용하면 더 쉽습니다.

또한 일부 유용한 도우미 함수는 입력 값 조회 래핑, 비 OO 버전의 strlen, substr 등과 같이 코드를 유사하게 보이도록 도와줍니다. 그래도 여전히 수동 조정이 필요합니다.


-5

유효한 JavaScript 식별자 shuold는 문자, 밑줄 (_) 또는 달러 기호 ($)로 시작해야합니다. 후속 문자는 숫자 (0-9) 일 수도 있습니다. JavaScript는 대소 문자를 구분하므로 문자 "A"~ "Z"(대문자) 및 문자 "a"~ "z"(소문자)를 포함합니다.

세부 사항 :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables


질문은 'JavasScript 변수가 $?로 시작할 수 있습니까?'가 아니라 'Why would a ...'입니다. OP는 그러한 명명 규칙을 사용해야 할 이유를 찾고있었습니다.
Steve Ives
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.