CoffeeScript 정의되지 않음


89

javascript에서 변수가 생성되지 않았는지 확인하려면

if (typeof MyVariable !== "undefined"){ ... }

커피 스크립트에서 어떻게하는지 궁금 해요? ...

if (MyVariable?false){ ... }

그러나 이것이 MyVariable함수인지 확인하면 void (0) 또는 이와 유사한 것을 호출하지 않으면 MyVariable (false)을 호출합니다.



시도 if MyVariable isnt undefined생산한다 if (MyVariable !== void 0).
Yami Odymel 2017-06-28

답변:


163

드디어 이렇게 쉬운 방법을 찾았습니다.

if (MyVariable?){ ... }

다음을 생성합니다.

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }

업데이트 2014 년 4 월 7 일 데모 링크

여기에 이미지 설명 입력


58
실제로 생성 된 것만item != null
Pencilcheck

13
@Pencilcheck-컴파일러가 항목이 코드에 정의되어 있음을 확인했기 때문입니다. (또한 훌륭한 이름-지금은 태블릿 확인이지만 :)이 답변은 정의되지 않은 것과 매우 다른 null 값도 선택합니다. 그것은 다른 질문 IMHO에 대한 답변 것 같아
세스

3
@Seth, 그렇습니다. 저는 항상 그 뉘앙스에 타 오르며 다음 논리적 질문을 제기합니다. CS는 다음에 대한 구문상의 지름길을 제공합니까? MyVariable = MyMethod; If MyVariable? ... MyMethod는 어디를 반환 할 수 undefined있습니까? 아니면 다음에 의지해야 if typeof myVariable isnt 'undefined'합니까?
neverfox

1
@neverfox 후자는 내가 아는 한 (정의되지 않은 유형 검사)-CoffeeScript는 null과 undefined가 합쳐 져야한다고 생각합니다.
Seth

6
@Seth, 정말로. 비 엄밀한 비교 ( ==!=실제로 치료) nullundefined동등한 값으로, 그래서 item != null실제로 모두 시험 nullundefined동시에. 로 쓰여진 경우에는 그렇지 않습니다 item !== null.
toriningen 2014-08-07

26

먼저 질문에 답하려면 :

if typeof myVariable isnt 'undefined' then # do stuff

Magrangs의 솔루션은 undefined와 false를 구분해야하는 경우를 제외하고 대부분의 경우에 작동합니다 (예 : myVariable이 true, false 또는 undefined 일 수있는 경우).

그리고 지적하자면 조건을 괄호로 묶어서는 안되며 중괄호를 사용해서는 안됩니다.

then모두가 같은 라인에있는 경우 키워드는 그렇지 않은 코드가 내부의 조건이 무엇인지 나타 내기 위해 들여 쓰기를 사용하여 사용할 수 있습니다.

if something  
    # this is inside the if-statement  
# this is back outside of the if-statement

도움이 되었기를 바랍니다!


isnt키워드에 해당 !=커피 스크립트에서, 당신은 자바 스크립트를 사용하는 경우 더 읽을 수있다.
Aaron Dufour 2012 년

12
상당 !==하지!=
미샤 Arefiev

1
이것이 가장 구체적인 답변입니다. 다른 많은 답변도 null 값과 상호 작용합니다. Thx
Seth

1
@MischaArefiev !=in Coffee !==는 JavaScript로 번역됩니다 .
Suzana

14

이 답변은 이전 버전의 coffeescript입니다. 최신 답변을 원하면 위의 Jaider의 답변을 참조하십시오 (2014 년 7 월 기준).

이 커피 스크립트 는 내가 생각하는대로 수행합니다.

if not MyVariable?
  MyVariable = "assign a value"

다음을 생성합니다.

if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
  MyVariable = "assign a value";
}

Nb MyVariable첫 번째에 할당하면 이 코드MyVariable 에서처럼 undefined로 설정하더라도 다음과 같이 컴파일됩니다.

if (!(MyVariable != null)) {
  MyVariable = "assign a value";
}

나는 !=CoffeeScripts Existential Operator(물음표) 에서 사용하는 undefined것이 null.

추신 당신은 실제로 if (MyVariable?false){ ... }일할 수 있습니까? 이 실존 연산자와 거짓, 즉 사이에 공백이 아니라면 그것은 나를 위해 컴파일되지 않습니다 MyVariable? false다음 커피 스크립트 때문에의 함수처럼 그것을 확인하게 false이 생각하는 당신을위한 매개 변수 MyVariable, 예를 들면 :

if MyVariable? false
  alert "Would have attempted to call MyVariable as a function"
else
  alert "but didn't call MyVariable as it wasn't a function"

생성 :

if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
  alert("Would have attempted to call MyVariable as a function");
} else {
  alert("but didn't call MyVariable as it wasn't a function");
}

3
이것은 오래된 커피 스크립트입니다. 은 variable?이제 변수로 컴파일 = NULL!
Gambai

@Gambai 확실합니까? 웹 사이트에는 여전히 ... !== null coffeescript.org/#try:variable%3F
AJP

1
예, 이제 컴파일러 는 변수가 코드의 어딘가에 정의되어야 할 때 최적화로 정의되지 않은! =를 생략합니다 . 내가 말을 해야 컴파일러는 항상 ... 제대로 작동하지 않기 때문에
Suzana

@Suzana_K 잘 알고 있습니다. 나는이 질문을 접하는 사람들이 최신 답변을 원할 것이라고 확신합니다. 자유롭게 내 답변을 수정하거나 새 답변을 게시하면 내 상단에서 링크하겠습니다. ES6 / TypeScript를 채택한 후 더 이상 CoffeeScript를 사용하지 않아 답변을 업데이트 할 수 없습니다. 실제로 Jaider의 답변이 그것을 다루는 것처럼 보입니다. stackoverflow.com/a/10238211/539490
AJP


9

의 Jaider의 답변 (불충분 한 평판으로 인해 주석을 달 수 없음) 외에도 객체 / 배열 내부에있는 경우 다른 경우가되도록주의하십시오.

someArray['key']?

다음으로 변환됩니다.

someArray['key'] != null

js2coffee.org의 스크린 샷 :

js2coffee.org


키가 있는지 확인하는 중이므로 의미가 있습니다. 배열이 있는지 확인해야하는 경우 someArray? [ 'key']?
Joshua Davison

6

나는 단지 사용한다 :

if (myVariable)
    //do stuff

undefined는 거짓이므로 myVariable이 정의되지 않은 경우에만 작업을 수행합니다.

0, ""및 null 값에 대해 '일을 수행'한다는 점을 알고 있어야합니다.


1
또는 myVariable과 같은 거짓 값이 허용되지 않는 한이 방법을 선호합니다 . null0
Bryan Downing

3

정의되지 않은 null이 아닌 변수에 변수를 할당하는 가장 깨끗한 방법은 다음을 사용하는 것입니다 unless.

unless ( myVar? )
    myVar = 'val'

6
myVar ?= 'val'
Ricket 2014

2

OR 관용구를 사용하지 않는 이유는 무엇입니까?

myVar or 'val'

따라서 결과는 'val'과 같을 경우 정의되지 않은 경우 myVar와 같습니다.


3
포함 -이 관용구로 어떤 falsish 값은 '발'대신이 있어야 무엇이든의 반환 '', 0.0false. 아마도 원치 않는 것이 아닙니다.
toriningen 2014-08-07
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.