if-else 속기를 사용할 때 두 번째 표현식 생략


290

if else없이 속기를 쓸 수 있습니까 else?

var x=1;

x==2 ? dosomething() : doNothingButContinueCode();   

나는 null다른 작품을 넣는 것을 보았습니다 (그러나 그것이 왜 좋은 아이디어인지는 알 수 없습니다).

편집 : 당신 중 일부는 내가 이것을 시도하는 것을 귀찮게 한 것처럼 보입니다. 순전히 호기심에서 벗어났습니다. 나는 JavaScript를 뒤섞는 것을 좋아한다.


var | var구문 이 있다고 생각 합니다. 특히 (IMO) 삼항 문제가 "보"기 어려울 수 있으므로주의하십시오. 드물게 사용하십시오.
Jared Farrish 2016 년

@JaredFarrish if 문을 사용하는 것보다 "보이기 쉬운"삼항의 요점이 아닌가? 또한 당신이 말하는 구문은 무엇입니까?
Hassan

1
아니요, 나는 그들이 모든 경우에 더 쉽다고 생각하지 않습니다. 제 생각에 "전체 요점"은 한 줄로 작성하거나 ( "나의 코드가 당신의 것보다 짧습니다") 단순한 결과를 가진 구체적이고 문자적인 경우에 대한 것입니다. 삼항 누적은 특히 치명적이며 모든 비용을 피해야합니다. :)
Jared Farrish

1
@Hassan- foo = bar | cat;첫 번째가 허위 인 경우 와 같은 것을 보았습니다 . 널? 두 번째로 넘어진다. 그러나 나는 그것을 보았고 사용하지 않았습니다.
Jared Farrish

3
@JaredFarrish : a || b또는입니다 a && b. 그렇지 않으면 b항상 평가됩니다.
kennytm

답변:


263

이것은 또한 옵션입니다.

x==2 && dosomething();

dosomething()x==2true로 평가 된 경우에만 호출됩니다 . 이것을 단락 이라고 합니다.

이와 같은 경우에는 일반적으로 사용되지 않으며 실제로 이와 같은 코드를 작성해서는 안됩니다. 이 간단한 접근 방식을 권장합니다.

if(x==2) dosomething();

항상 읽을 수있는 코드를 작성해야합니다. 파일 크기가 걱정된다면 많은 JS 압축기 중 하나를 사용하여 축소 된 버전을 만드십시오. (예 : Google의 폐쇄 컴파일러 )


10
오 단락. 대부분의 중급 개발자와 일부 "양념 전문가"는 코드 가독성을 높이 평가하고 있습니다.
Jared Farrish

2
기술적으로는 중괄호가 필요하지 않습니다. if (1 - 1 === 0) $('.woot').text('Woot!'); PHP에서 항상 양식을 사용하고 이제 Coffeescript를 채택하고 있으므로 Javascript에서도 사용합니다.
hollenbeck이되어

5
나는 개인적으로 그것이 하나의 결과라면 사실이라면 작은 것인지 믿습니다.. 그것의 더 빠르고 쉬운 x == 2 && dosomething ();
Dean Meehan

9
if x==2 && doSomething() || doSomethingElse()
Agustín

1
JavaScript에 다음과 같은 Ruby 유사 구문이 포함되기를 바랍니다 doSomething() if x === 2. 나는 루비를 그리워하지는 않지만 그리워합니다.
채드 존슨

743

당신이 가진 것은 삼항 연산자를 상당히 비정상적으로 사용하는 것입니다 . 일반적으로 다음과 같은 다른 작업 내에서 명령문이 아닌 표현식으로 사용됩니다.

var y = (x == 2 ? "yes" : "no");

따라서 가독성을 높이기 위해 (여러분이하고있는 일이 드물기 때문에) 원하지 않는 "다른 것"을 피하기 때문에 다음과 같이 제안합니다.

if (x==2) doSomething();

여기에 전체 명령으로 삽입 된 마무리 라인을 추가 할 수 있습니다 (예를 들어 jquery fade in 및 fade out 기능 사용) x == 2? $ (element) .fadeIn () : $ (element) .fadeIn (); 반환 변수를 가질 필요는 없습니다 (첫 번째 코드의 var y와 같은).
Prageeth godage

1
논리를 완벽하게하려면 트리플 "="부호를 사용해야합니다. var y = (x === 2? "yes": "no")에서와 같이;
fino


20

다른 것을하고 있지 않다면 왜하지 마십시오.

if (x==2) doSomething();

4
당신은 다른 일을하더라도 그것을 할 수 있습니다
nmirceac

14

null삼항식의 가지 중 하나에 사용하는 것이 좋습니다. 그리고 삼항식은 자바 스크립트의 문장으로 좋습니다.

그러나 스타일 문제로 프로 시저를 호출하는 것을 염두에두고 if..else를 사용하여 작성하는 것이 더 명확합니다.

if (x==2) doSomething;
else doSomethingElse

또는 귀하의 경우

if (x==2) doSomething;

6

이 아주 오래된 실에 작은 추가 ..

your'e는 내부 식 평가하는 경우 for/의 while삼항 연산자 루프를하고 싶지 continue또는 break결과로 - 당신은 둘 때문에 문제가있는거야 continue&가 break없는 표현 들이있는 거, 값없이.

이것은 생산할 것이다 Uncaught SyntaxError: Unexpected token continue

 for (const item of myArray) {
      item.value ? break : continue;
 }

실제로 명령문을 반환하는 단일 라이너를 원한다면 이것을 대신 사용할 수 있습니다.

  for (const item of myArray) {
      if (item.value) break; else continue;
  }
  • PS-이 코드는 눈썹을 약간 올릴 수 있습니다. 그냥 .. :)

4

기술적으로 null 또는 0 또는 임의의 이 있으면 반환 값을 사용하지 않으므로 작동합니다. 그러나 왜 구문 대신이 구문을 사용하고 if있습니까? 이런 방식으로 코드를 작성할 때 수행하려는 작업이 명확하지 않습니다. 사람들과 노업을 혼동 할 수 있습니다 (귀하의 경우 널임).


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