JavaScript에서 ':'(콜론)은 무엇을합니까?


178

JavaScript를 배우고 있으며 jQuery 라이브러리를 탐색하는 동안 :(콜론)이 많이 사용되는 것을 볼 수 있습니다. 이것은 JavaScript에서 무엇을 사용합니까?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };

답변:


247
var o = {
    r: 'some value',
    t: 'some other value'
};

기능적으로

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

14
C # 객체 이니셜 라이저 구문과 비슷합니다. 감사!
Micah

둘러싸는 객체가 없으면 어떻게합니까?
theonlygusti

@ FranciscI.B 추측해야한다면, JavaScript의 상위 세트 인 TypeScript라고 생각합니다. 유형이 float 인 xMin이라는 var를 사용하여 클래스를 선언합니다. 이것이 바로 그 의미입니다.
Sal_Vader_808

96

또한 콜론을 사용하여 명령문에 레이블을 지정할 수 있습니다. 예를 들어

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if(j>50) {
     break outerloop;
   }
  }
i++

}

1
LABEL A ((STATEMENT))
Muhammad Umer

4
Spagetti Code에 오신 것을 환영합니다 :)
Leo The Four

고토는 위장 할 수 없습니다. 당신은 단순히 고토를 깰 수 있습니다. 그리고 당신은 그것을 찾았습니다! ;)
Andrew

1
JS 레이블에 대한 MDN 참조 페이지 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Peter

그렇기 때문에 a => {b : 2}가 정의되지 않은 결과를 반환하지 않습니다
Pavlo D

70

너희들은 콜론이 삼항 연산자에서도 사용된다는 것을 잊고있다 (jquery 가이 목적으로 그것을 사용하는지는 모르겠지만).

삼항 연산자는 if / then 문의 표현식 양식 (표현식이 값을 리턴 함)입니다. 다음과 같이 사용됩니다.

var result = (condition) ? (value1) : (value2) ;

삼항 연산자를 사용하여 if / then과 같은 부작용을 만들 수도 있지만, 이는 매우 나쁜 습관입니다.


2
일명 "삼항 연산자". OP는 객체 리터럴 사례에 대해 엄격하게 묻고 있습니다. OP가 요구하는 것 이상으로 나아가려면 콜론도 레이블에 사용됩니다.
Ates Goral

14
그렇습니다. 나는 정말 그런 식으로 프로그래밍 개념을 잘못 식별하는 것이라면 인터넷에서 멀리 떨어져 있어야합니다.
Breton

레이블에 사용 된 것을 보는 것이 좋을 것입니다. 그래서 지금은 여전히 ​​인터넷 검색을하고 있기 때문에 @AtesGoral과 혼동되지 않습니다.
Shane

Javascript에서 :가 사용되지 않는 것을 나열하는 것이 더 쉬울 것입니다.
kingfrito_5005

45

':'은 기본적으로 키 값 쌍의 구분 기호입니다. 귀하의 예에서는 Javascript Object Literal 표기법입니다.

자바 스크립트에서 객체는 콜론으로 속성의 식별자와 그 값을 구분하여 정의되므로 다음을 가질 수 있습니다.

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

그런 다음 다음과 같이 사용하십시오.

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"

이것의 서브셋은 JSON (Javascript Object Notation)으로도 알려져 있는데, 서버 측 언어로 작고 빠르게 구문 분석하고 Javascript는 JSON 문자열을 객체로 직렬화 해제하기 때문에 AJAX 호출에 유용합니다.

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');

특수 문자 또는 공백이 포함되어 있으면 키를 따옴표 안에 넣을 수도 있지만 작업하기가 더 어려워지기 때문에 권장하지 않습니다.

있다는 사실을 숙지 자바 스크립트 객체 리터럴 표기법 자바 스크립트 언어는 메시지 전달을위한 JSON 표준 다르다. 2의 주요 차이점은 함수와 생성자가 JSON 표준의 일부가 아니지만 JS 객체 리터럴에서 허용된다는 것입니다.


2
귀하의 답변을 읽으면서 투표하겠다고 생각했지만 "JSON이라고도합니다." 객체 리터럴과 JSON은 확실히 동일 하지 않습니다 . 실제로 JSON을 언급하기 전에 예제가 유효한 JSON이 아닙니다.
nnnnnn

@nnnnnn 2의 차이점은 매우 미묘하지만 그럼에도 불구하고 중요합니다. 이에 대한 답변을 좀 더 구체적으로 업데이트했습니다.
Dan Herbert

1
업데이트가 보입니다. 좋은. JSON을 사용 하려면 키 이름을 따옴표로 묶어야합니다.
nnnnnn

왜이 모든 것을 두 번 언급해야합니까? 당신이 "그런 다음 그것을 사용한다"라고 말했을 때
Harsha

17

객체 리터럴 구문의 일부입니다. 기본 형식은 다음과 같습니다.

var obj = { field_name: "field value", other_field: 42 };

그런 다음 다음을 사용하여이 값에 액세스 할 수 있습니다.

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"

함수를 값으로 가질 수도 있으며 기본적으로 객체의 메소드를 제공합니다.

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9

1
그것은 더 많은 정보를 찾고 찾을 수있는 용어를 주었기 때문에 좋습니다.
johnny

13

변수로 객체를 나열하는 데 사용할 수 있습니다. 또한 if 문장의 약어로 약간 사용됩니다.

var something = {face: 'hello',man: 'hey',go: 'sup'};

그리고 이것을 이렇게 불러

alert(something.man);

또한 if 문장 :

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}


10

일반적으로 JavaScript에서 콜론 ':'이 사용되는 시나리오입니다.

1- 객체 선언 및 초기화

var Car = {model:"2015", color:"blue"}; //car object with model and color properties

2- 라벨 설정 (복잡한 제어 구조 및 스파게티 코드가 생성되므로 권장하지 않음)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if(userInput > 10000)
     {
          break List;
     }
}

3 스위치 설명

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}

4- 삼항 연산자

document.getElementById("demo").innerHTML = age>18? "True" : "False";

1
단일 콜론을 대신하여 단락 평가에 사용할 수도 있습니다 ||. 예 : var a = false, b = a || 'Default value';동등하다var a = false, b = a : 'Default value';
숀 Cockerill

7

JSON 또는 JavaScript 객체 표기법입니다. 객체 또는 해시 맵을 설명하는 빠른 방법입니다. 콜론 앞의 것은 속성 이름이고 콜론 뒤의 것은 그 값입니다. 따라서이 예제에는 변수 r에 값이있는 속성 "r"이 있습니다. t도 마찬가지입니다.


3
JSON은 JavaScript 객체 초기화 구문의 일부일뿐입니다. '{a : k ()}'여기서 k는 함수가 아니지만 JSON은 완벽하게 JavaScript 객체 초기화 구문입니다.
yfeldblum

12
놀랍게도 "JSON"이 아닙니다. 그것은 보이는 JSON처럼. JavaScript 고유의 객체 리터럴 구문이며 코드 내에 직접 표시 될 수 있습니다. 반면에 JSON은 데이터 직렬화 / 교환 형식입니다. JSON은 "공중 (airborne)"상태 일 때, 즉 운송 중이거나 아직 실제 객체로 파싱되지 않은 경우에만 JSON입니다.
Ates Goral

3
아 테스 산양 +1하지만, 주어진 예도하지 않습니다 보면 JSON과 같은 : 이름이 유효 JSON 구문이 될 수 있도록 큰 따옴표로 할 것이다.
NickFitz

3

내가 얼마 전에 한 바보 같은 실수는 일부 사람들에게 도움이 될 수 있습니다.

이와 같은 이벤트에서 ":"을 사용하면 값이 변경되지 않습니다.

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });

따라서 "nub0x"는 처음 발생하는 이벤트로 초기화되며 값이 변경되지 않습니다. 그러나 다음 이벤트에서는 "nub0y"가 변경됩니다.


나는 이것에 왔으며, 실제로 여기서 일어나는 일은 당신이 진술 전에 라벨을 사용하고 있다는 것입니다. 할당은 없지만, event.target.offsetLeft + event.target.clientWidth/2;ondrag 메소드가 호출 될 때마다 명령문 이 실행되지만 값을 절대로 할당하지 마십시오.nub0x
kketch

실제로 이것은 평가 용으로 사용되고 있으며는 :마치 것처럼 취급되고 ||있습니다. 따라서, 거짓이 event.target.offsetLeft + event.target.clientWidth/2;될 때마다 트리거됩니다 nub0x.
Shaun Cockerill

1

JavaScript에서 콜론의 또 다른 사용법은 변수의 이름을 바꾸는 것입니다.

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
const { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";

코드에서 이름을 바꾸려는 어색하고 긴 변수 이름을 가진 값을 반환하는 타사 라이브러리를 사용하는 경우 유용합니다.

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