문제

(myVar && foo())

위의 코드는 무엇을 의미합니까? 그것에 동등한 것은 무엇입니까?

나는 그것이 한 줄로 실행된다고 생각합니다.

도움이 되었습니까?

해결책

표현은 평가합니다 myvar 만약에 myvar 거짓이고 foo() 만약에 myvar 진실입니다. 다음 스 니펫은 거의 동일합니다.

var x = (myvar && foo());

if(myvar){ var x = foo(); } else { var x = myvar; }

다른 팁

"Myvar가 거짓이 아닌 경우 foo ()를 실행하십시오"와 동일시하는 표현입니다. 다음과 같이 사용되는 경우 : var x = (myVar && foo()), 결과는 다음과 같습니다.

Myvar가 거짓이 아닌 경우 x는 foo ()의 출력으로 설정됩니다. Myvar가 거짓이면 X는 Myvar의 값으로 설정됩니다.

foo () 함수는 myvar가 아닌 경우에만 호출됩니다. 거짓: 거짓이 될 수 없음, "", 0, null 또는 정의되지 않은 것을 의미합니다. (다른 사람?)

다음과 같은 예를 보는 것이 더 일반적입니다.

window.console && console.log("some helpful debug info");

이것은 다음과 같이 해석됩니다 ...

" '창'변수에 '콘솔'이라는 멤버가있는 경우 ..."

( '창'으로 '콘솔'을 접두하는 것이 중요합니다. 콘솔이 정의되지 않은 경우 거짓 대신 javaScript 오류가 발생하기 때문입니다.)

"... '콘솔'객체에서 '로그'메소드를 호출하십시오."

이 표현은 부울 표현에서 단락을 영리하게 사용하고 있습니다. foo ()는 myvar가 평가하는 경우에만 실행됩니다. true.

if (myVar) {
    foo();
}

훨씬 더 명확합니다. 이런 종류의 코드가 의미가있는 경우가있을 수 있지만 스타일 체커 (이런 종류의 일에 관심이 있다면)가 그에 맞게 적합합니다. 보다 http://javaScript.crockford.com/code.html. 세미콜론 삽입 및 발현 진술에 의존하지 않는 것이 좋습니다.

편집 : 참고하십시오 var x = a && b(); 아마도 특정 상황에서는 그렇게 나쁜 생각이 아닐 것입니다. 하지만, (a && b()) 그 자체로는 여러 가지면에서 잘못입니다. (세미콜론 삽입, 표현 진술, 의미 적으로 비밀스러운 것 외에는)

&&가 평가 될 때 왼손이 먼저 평가됩니다. myVar, 이것이 사실이라면 오른쪽 만 평가됩니다. foo(). 이는 문서에서 A && B에서 A가 False 인 경우 a && b 표현이 항상 False로 평가되기 때문입니다.

위의 진술은 일반적으로 다음과 같은 방식으로 사용됩니다.

var x = myVar && foo();

이것은 또한 다음과 같이 쓸 수 있습니다.

if myVar is truee x = foo(), else x = false
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top