누군가 Javascript로 달러 기호를 설명 할 수 있습니까?


378

문제의 코드는 다음과 같습니다.

var $item = $(this).parent().parent().find('input');

변수 이름에서 달러 기호의 목적은 무엇입니까, 왜 제외하지 않습니까?



[ttony21의 답변] [1]은 자바 스크립트에 유형이 없음을 나타내는 잘못된 설명입니다 (cf. [공식 문서] [2] [1] : stackoverflow.com/questions/846585/… [2] : ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

이 스레드는 상당히 오래되었지만 주류 브라우저는 $, $$ 글로벌 vairables를 표준화 한 것으로 보입니다. $ vs $$는 무엇을해야합니까?
Nick Sotiros

브라우저의 콘솔에 있지 않으면 아무것도 아닙니다. 예를 들어 크롬 바로 가기로에 $$ $를 정의 document.querySelector하고document.querySelectorAll
케빈 B

답변:


381

변수에서 '$'는 밑줄과 같이 해석기에 특별한 의미가 없습니다.

내가 본 것에서 jQuery를 사용하는 많은 사람들 (예제 코드가 나에게 보이는 모양)은 jQuery 객체를 포함하는 변수 앞에 $를 붙여서 쉽게 식별되고 정수와 섞이지 않도록합니다. .

$()jQuery 의 달러 기호 함수 는 자주 사용되는 라이브러리 함수이므로 짧은 이름이 바람직합니다.


86
참고 : 기본적으로 jQuery는 "jQuery"의 바로 가기로 "$"를 사용합니다. 이것은 다른 Javascript 라이브러리 사용에 영향을 미칩니다. 참조 docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
다시 말해, $는 변수 / 함수 이름에서 허용되는 모든 기호와 비슷합니다. 하는 var $=function(){}것은하는 것과 매우 같습니다 var a=function(){}.
F-3000

24
Thimmayya 귀하의 의견 "기본적으로 jQuery는"$ "를"jQuery "의 바로 가기로 사용합니다"는 Jquery 웹 사이트의 모든 페이지 상단에 굵은 글씨로 표시되어야합니다. 그들의 예제는 끔찍하게 문서화되어 있습니다.
RustyH 2016 년

$가 함수 매개 변수로 지정된 경우는 어떻습니까? 나는 같은 코드를보고있다 jQuery(document).ready(function($){. 그런 다음 $는 함수 구현 내부에서 사용된다.
still_dreaming_1

4
@ ThrowawayAccount3Million 이름의 일부일뿐입니다. $scope$ 의 경우 해당 이름의 문자 중 하나입니다. e의 끝에서 이륙하는 것처럼 $scope작동하지 않으므로 의지를 취하는 $것도 작동하지 않습니다. 와 같이 보이는 $( "a" ).addClass( "test" )경우 달러 기호는 그 이름의 전체 이름입니다.
still_dreaming_1

49

귀하의 예에서 $는 이름의 성격 이외의 특별한 의미가 없습니다.

그러나 ECMAScript 6 (ES6)에서 $는 템플릿 리터럴을 나타낼 수 있습니다.

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

37

$ 기호는 변수 및 함수의 식별자입니다.

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

그것은 달러 기호가 무엇인지에 대한 명확한 설명이 있습니다.

대체 설명은 다음과 같습니다. http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
자바 스크립트에는 유형이 있습니다. 어쨌든 달러 기호는 어떻게 관련이 있습니까? Javascript에서 유효한 식별자가되는 문자 일뿐입니다.
Erik Kaplun

10
나는 그 링크를 "명확한"설명이라고 부르지 않을 것이다. 함수와 변수 이름을 정의 할 때 $가 단순히 유효한 문자라고 설명하는 데 실제로 6 개 이상의 단락이 필요합니까?
약간

1
첫 번째 링크가 다시 작동하는 것 같습니다. 대체 설명이 끔찍하다는 @Slight에 동의해야합니다.
Sander Garretsen

링크의 샘플 코드는 이해하기 쉽습니다. 대박!
蔡宗容

32

달러 기호는 일반 문자 나 밑줄처럼 처리됩니다 (_ ) 됩니다. 통역사에게는 특별한 의미가 없습니다.

많은 다른 언어와 달리 Javascript의 식별자 (예 : 기능 및 변수 이름)는 문자, 숫자 및 밑줄뿐만 아니라 달러 기호도 포함 할 수 있습니다 . 심지어 달러 기호로 시작하거나 달러 기호 만으로 구성 할 수 있습니다.

따라서 $Javascript에서 유효한 함수 또는 변수 이름입니다.

왜 식별자에 달러 기호를 원하십니까?

이 구문은 실제로 식별자에서 달러 기호의 특정 사용법을 강요하지 않으므로 사용 방법에 달려 있습니다. 과거에는 생성 된 코드 , 즉 수작업이 아닌 코드 생성기에서 만든 코드 에서만 달러 기호로 식별자를 시작하는 것이 좋습니다 .

그러나 귀하의 예에서는 그렇지 않습니다. 누군가가 재미를 위해 처음에 달러 기호를 넣은 것처럼 보입니다. 아마도 습관을 잃은 PHP 프로그래머 일 것입니다. PHP에서 모든 변수 이름 앞에 달러 기호가 있어야합니다.

오늘날 인터프리터에서 달러 기호에 대한 또 다른 일반적인 의미가 있습니다. jQuery 객체의 이름 은 단일 달러 기호 ( ) 로만 구성됩니다 $. 이것은 프로토 타입과 같은 이전 Javascript 프레임 워크에서 빌린 규칙이며, jQuery를 다른 프레임 워크와 함께 사용하는 경우 이름을 모두 사용하기 때문에 이름 충돌이 발생합니다 $(jQuery는 글로벌 오브젝트에 다른 이름을 사용하도록 구성 할 수 있음) . Javascript에는 jQuery가 단일 달러 기호를 객체 이름으로 사용할 수있는 특별한 것이 없습니다. 위에서 언급했듯이 이는 또 다른 유효한 식별자 이름 일뿐입니다.


jQuery 객체와 충돌 할 수 없습니다. var $j = jQuery.noConflict();이제 $ j는 jQuery 객체입니다.
Justin Liu

6

달러 기호는 ecmascript 2015-2016에서 '서식 파일 리터럴'로 사용됩니다. 예:

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

실제 예제는 다음과 같습니다. https://es6console.com/j3lg8xeo/ 이 표시에 주목하십시오 " ` 따옴표 "는 일반적인 따옴표가 아닙니다.

라이브러리 jQuery로 작업하면서 U도 $를 만날 수 있습니다. .

정규 표현식 에서 $ 기호 는 줄 끝을 의미합니다.


4

이유없이. 코드를 작성한 사람이 PHP에서 왔을 수도 있습니다. 이름을 "_item"또는 "item"또는 "item $$"로 지정한 것과 동일한 효과를 갖습니다.

접미사 (예 : "item $", "items"라고 발음) 는 헝가리어 표기법과 유사한 "핀란드 표기법" 이라는 규칙으로 DOM 요소와 같은 관찰 가능 항목을 나타낼 수 있습니다 .


1

다음은 좋은 짧은 비디오 설명입니다. https://www.youtube.com/watch?v=Acm-MD_6934

Ecma 국제 식별자에 따르면 이름은 유니 코드 표준 5 장의 "식별자"섹션에 나와 있는 문법에 따라 약간 수정 된 토큰입니다 . 식별자는 ReservedWord가 아닌 IdentifierName입니다 ( 7.6.1 참조 ). 유니 코드 식별자 문법은 유니 코드 표준에 의해 지정된 규범 적 및 유익한 문자 범주를 기반으로합니다. 유니 코드 표준 버전 3.0에서 지정된 범주의 문자는 모든 ECMAScript 구현에 따라 해당 범주에서와 같이 처리되어야합니다.이 표준은 특정 문자 추가를 지정합니다.

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

자세한 내용은 http://www.ecma-international.org/ecma-262/5.1/#sec-7.6을 참조하십시오.

Ecma International 은 1961 년에 설립 된 산업 협회로서 정보 통신 기술 (ICT) 및 가전 제품 (CE)의 표준화에 전념하고 있습니다.


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
TartanLlama

... @TartanLlama 내 답변을 다운 그레이드 한 경우 업데이트 된 답변을 읽으십시오. 감사합니다.
Nomis

내가 아니 었어! 방금 신고했습니다.
TartanLlama

...이 투표를 한 사람에게 좋습니다. 이유를 설명하고 편집 한 답변을 읽으십시오. 감사합니다.
Nomis

5
... @TartanLlama 이것은 Stackoverflows 익명 다운 그레이드 기능이 손상되었음을 증명합니다. 답변을 찾아 보면 다른 답변을 보는 것이 유용하다는 것을 알게되었으므로 이전 답변을 받아 들인 답변으로도 괜찮습니다.
Nomis

1

jQuery를 사용할 때 $변수 이름의 접두사로 symbol을 사용하는 것은 단지 규칙에 의한 것입니다. 완전히 선택 사항이며 예제와 같이 변수에 jQuery 객체가 있음을 나타냅니다.

즉, 객체에서 다른 jQuery 함수를 호출해야 할 때 $()다시 래핑 할 필요가 없습니다 . 예를 들어 다음을 비교하십시오.

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this 

// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

$접두사를 사용하면 이미 jQuery 객체를 보유한 변수를 즉시 인식 할 수 있고 코드를 더 쉽게 읽을 수 있으며로 이중 / 다중 줄 바꿈을 제거 $()합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.