2012-12-18 3 views
1

나는 자바 스크립트에 비교적 새로운 그리고 난 내가 모든 감각을 만들 수 없습니다이 문제를 여기에조건부 연산자로 배열의 요소를 선언하는 Javascript가 예기치 않게 작동합니까?

크롬의 코드 및 관리자 출력의를 보았다이와 무슨 일

> test?'test':'ok' 
"ok" 
> [test?'test':'ok'] 
["ok"] 
> ['ok' + test?'test':'ok'] 
["test"] 

정렬? 내가 원하는 것은 배열을 만드는 것입니다. [ 'browser'+ isIE? 'IE': '알 ​​수 없음'.

[isIE? '브라우저 : IE': '브라우저 : 알 수 없음']. 하지만 위의 문법이 잘못되었음을 이해하지 못합니까?

+0

구문 오류를 중단했습니다. 확인 부탁합니다. – closure

+0

'[ 'browser'+ isIE? 'IE'+ 'UNKNOWN'] '이 옳지 않습니다.'[ 'browser'+ isIE? 'IE': 'UNKNOWN']'(콜론':'에주의하십시오.) – rae1

+0

글쎄,'test'의 가치는 무엇입니까? –

답변

2

이 표현식이 평가 방법은 다음과 같습니다

('ok' + test) ? 'test' : 'ok'; 

이 경우 truthy, 'ok' 그렇지 않으면 'test'를 반환 'ok'test의 연결을 평가합니다.

당신이 원하는 것은 : 'test' 경우 test이 truthy입니다 삼항 표현의 결과

'ok' + (test ? 'test' : 'ok'); 

연결할 'ok', 'ok' 그렇지 않으면

업데이트

콘크리트 예. 이것은 당신이 원하는 것을 반환합니다.

'browser: ' + (isIE? 'IE' : 'UNKNOWN') 

난 당신이 배열 여부를 나타 내기 위해 대괄호 식을 감싸 있는지 확실하지 않았다, 그러나 나는 여기 ;-)

+0

굉장! 이것이 표현의 문제였습니다. 고마워, 잭. –

5

당신은 [isIE? 'browser: IE' : 'browser: UNKNOWN']에 다시 작성할 수 있습니다 : 나는 항상 사용 브래킷 조건 연산자와에게 추천 할 것입니다

["browser: " + (isIE ? 'IE' : 'UNKNOWN') ]

.

일반적인 함정은 bool ? "a" : "b" + "c"입니다. "a" 또는 "bc"이지만, 의도 한 "ac"은 표시되지 않습니다.

(bool ? "a" : "b") + "c"은 의도 한 기능입니다.

또 다른 함정 :

'ok' + test?'test':'ok'"test" 또는 "ok"하지만 결코 "oktest" 또는 "okok" 제공합니다. 'ok' + test이 부울로 취급되기 때문입니다 (항상 사실일까요?).

'ok' + (test ? 'test' : 'ok')은 의도 한 기능입니다.

+0

그리고이 문제는 다음과 같은 괄호로 극복 할 수 있습니다 : '(bool? "a": "b") + "c"' 이렇게하면 'ac'또는 'bc'가됩니다. – marekful

+0

Frits가 작동 해 주셔서 감사합니다. –

관련 문제