달러 기호로 시작하는 변수가있는 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는 공용 객체 이름 앞에
$
개인 객체 이름을 접두어로 붙입니다$$
. 코드에서$
또는$$
접두사를 사용하지 마십시오 .
답변
저는 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는 $
단순히 이름을 나타내는 또 다른 문자로 취급 되며 항상 $(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 등과 같은 변수 이름의 또 다른 유효한 문자입니다.