2016-12-09 2 views
2

결과가 PHP 쪽에서 발생했으며 json_encode은 모든 값을 문자열로 보냅니다 (원래 형식이 아님). quote_tax에 오는 문자열은 1|0 물론이 예를 들어 true|false입니다 :Javascript에서 삼항 연산자를 사용하는 부울에 대한 문자열?

나는 그런 값에 따라 몇 가지 작업을 수행하려는 그들이 문자열로오고 있기 때문에이 같은 것을 할 필요가
{ 
    "country_id": "3", 
    "country_name": "Italy", 
    "contract_tax": "1", 
    "quote_tax": "0", 
    "contract_inflation": "0", 
    "quote_inflation": "0" 
} 

:

data.quote_tax == '1' 
       ? $('#contract_tax').val(1).attr('checked', 'checked') 
       : $('#contract_tax').val(0).removeAttr('checked'); 

나는 정수로 변환하는 데 약 .parseInt()을 알지 못했다하지만 난 같은 비교를해야 다음 생각하지만,이 경우는 INT과 비교 :

data.quote_tax == 1 
       ? $('#contract_tax').val(1).attr('checked', 'checked') 
       : $('#contract_tax').val(0).removeAttr('checked'); 

나는이 방법으로 시도 :

Boolean(data.quote_tax) == true 
       ? $('#contract_tax').val(1).attr('checked', 'checked') 
       : $('#contract_tax').val(0).removeAttr('checked'); 

을 그리고 Boolean(data.quote_tax) 항상 true 경우에도 data.quote_tax = '0'으로 평가하기 때문에 작동하지 않습니다.

나는 이미이 게시물을 점검하지만 적절한 해결책을 찾을 수 없습니다 :

이 작업을 수행하려면 여기를 또는 얼마나 문제가 있는지 어떤 아이디어?

+0

''0 ''은 비어 있지 않은 문자열이므로 사실입니다. '''와'0'은 거짓입니다. 'Boolean (Number (data.quote_tax)) == true' 또는 단순히'+ data.quote_tax'를 조건으로 사용하십시오. – Xufox

답변

6

값 중 하나 "truthy"또는 "falsy"의 의미입니다 부울 문맥에서는 true 또는 false으로 해석됩니다. 숫자의 경우 0false이고 나머지는 true입니다. 값을 숫자로 변환하면 부울로 처리하기 위해 다른 변환을 수행 할 필요가 없습니다.

var x = parseInt('1'); 
 
x ? console.log(true) : console.log(false); 
 

 
x = parseInt('0'); 
 
x ? console.log(true) : console.log(false);

See here for more information.

+0

모든 답변은 좋지만이 중 하나가 지금까지 가장 좋은 것입니다. – ReynierPM

2

당신은 연산자를 결합 할 수 있습니다 - 숫자로 문자열을 구문 분석하고 부울로 변환 : 자바 스크립트에서

console.log(Boolean(parseInt('0', 10))); 
 

 
console.log(!!parseInt('0', 10)); 
 

 
console.log(!!+'0');

+2

아니면 그냥 !! !! parseInt ('0', 10);' – Shilly

1

당신이 뭔가를 할 수 있습니다

!!parseInt('1'); //true 
!!parseInt('0'); //false 
2

부울로 변환하면 비어 있지 않은 문자열 true로 평가되므로 귀하의 마지막 접근 실패 ("0" 포함). 비 - 제로 정수 true로 평가하면서


정수 0은 false로 평가합니다. 따라서 귀하의 경우 parseInt(data.quote_tax) == 1parseInt(data.quote_tax)과 동일합니다.


그러나, 나는이 상황에서 첫 번째 방법과 스틱 것 : 이것은 어떤 유형 변환이 필요하지

data.quote_tax == '1' 

, 의도는 즉시 분명하고 알고 개발자를 필요로하지 않는다 또한 위에 열거 된 것들을 이해해야합니다. 코드를 복잡하게 만들지 마십시오.

0

개인적으로 나는 항상 coercing types에 머물러 있습니다. 문제는 다른 사람들이 제안한대로 수행하면 if (x)이 작동합니다. 0 & 1에 적합합니다. 어떤 이유로 든 "false", 2, null 또는 undefined이 표시되는 경우 어떻게됩니까? 코드에서 여기서 무엇을할까요?

그것을 prevents Javascript coercion을 (== 반대) 당신이 ===를 사용하는 경우

undefined ? console.log(true) : console.log(false); 
 
null ? console.log(true) : console.log(false); 
 
NaN ? console.log(true) : console.log(false); 
 
2 ? console.log(true) : console.log(false); 
 
"false" ? console.log(true) : console.log(false); 
 
"true" ? console.log(true) : console.log(false);
. 그런 다음 그것은 이제 더 일관되게 많이 작동하는 문자열 값 "1"

"1" === "1" ? console.log(true) : console.log(false); 
 
1 === "1" ? console.log(true) : console.log(false); 
 
undefined === "1" ? console.log(true) : console.log(false); 
 
null === "1" ? console.log(true) : console.log(false); 
 
NaN === "1" ? console.log(true) : console.log(false); 
 
2 === "1" ? console.log(true) : console.log(false); 
 
"false" === "1" ? console.log(true) : console.log(false); 
 
"true" === "1" ? console.log(true) : console.log(false);

을 테스트 할 수 있습니다. 귀하의 경우에는 5 월 문제가되지 않을 수도 있습니다.

관련 문제