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

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

(I 대해 묻는 게 아니에요 $('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, 프로토 타입 및 MS AJAX (AKA Atlas)는 모두이 문자를 식별자 (또는 전체 식별자)로 사용합니다.

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

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

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

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

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


답변

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

각도 네임 스페이스 $$$

실수로 코드와 이름이 충돌하는 것을 방지하기 위해 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관용적 인 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( ... );

답변

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

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

사용해보십시오.


답변

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