2012-03-28 2 views
7

이것이 부울 (false) 대신 빈 문자열 ("")을 반환하는 이유를 설명 할 수 있습니까? 이 작동하지만 예상대로Javascript는 문자열을 속기 부울 테스트로 반환해야합니다.

var x = ""; 
alert(x && x.length > 0); 

... 것은 사실 반환 : 나는 기본적으로 그냥 값이 변수에 존재하는지 확인하는 간단한 속기 확인을하려고

var y = "abc"; 
alert(y && y.length > 0); 

(보장은 아니다 undefined, null 또는 빈 문자열).

각 테스트를 개별적으로 수행 할 수 있음을 알고 있습니다. (x == null, typeof x == 'undefined', x == '') - Javascript가 어떻게 보이는지에 대한 이유를 이해하려고합니다. 부울 테스트.

+4

노트 (X) ' – ajax333221

+0

당신은'alert (typeof x! = undefined && x.length> 0)'과 같은 것들로 단축 할 수 있어야합니다. 왜냐하면 둘 다 bool을 반환하기 때문이며, x가 정의되지 않은 경우 오류가 발생할 수 있습니다 첫 번째 인수가 잘못되었을 수 있으므로 mini func 또는 인라인 – SpYk3HH

답변

7

JavaScript의 조건부 연산자가 충족되면 평가 된 마지막 값을 반환합니다.

var x = ""; 
alert(x && x.length > 0); 

빈 문자열 falsey, 그래서 당신이 상태에서 단지 x를 사용하는 경우, 그것은 거짓 될 것입니다. &&을 사용하고 있기 때문에 LHS가 이면이면 RHS를 확인할 필요가 없습니다. 이것은 short circuit evaluation입니다. 따라서 마지막 평가 부분 인 빈 문자열은 alert()으로 반환됩니다.

var y = "abc"; 
alert(y && y.length > 0); 

이 아닌 빈 문자열 truthy입니다. 따라서 LHS가 이고 &&이므로 RHS가 계산됩니다 (전체 조건이 인지 알아야합니다). y.length > 0의 반환 값은 true이므로 alert()으로 전달됩니다.

+0

으로 나누는 것이 좋습니다.이 정보가 th를 읽는 사람에게 도움이 될 수 있습니다. JS 거짓 값은 = '0, "", false, null, undefined, NaN' – ajax333221

+0

감사합니다 @alex가 완벽합니다. – kman

0

x가 이미 정의되었으므로 빈 문자열 만 반환됩니다.

이렇게하면 식 alert(x)의 첫 번째 부분에 빈 문자열이 표시됩니다.

null/빈 문자열을 확인해야하는 경우 다음과 같이 시도하십시오.&& (AND 연산자)를 사용하여

String.isNullOrWhiteSpace = function (str) { 
    if (typeof str === "string") { 
     var isNullOrWhiteSpace = false; 

     // Check for null string 
     if (str == null || typeof str === "undefined") isNullOrWhiteSpace = true; 

     // Check for string with whitespace 
     if (str.replace(/\s/g, '').length < 1) isNullOrWhiteSpace = true; 

     return isNullOrWhiteSpace; 
    } 

    if (typeof str === "undefined" || str == null) { 
     return true; 
    } 
}; 
0

조건부 작업 할 때 중지 : false

  • 성공적으로 끝을 만들어으로 평가 조건의

    • 하나를 true
    • 로 모든 것을 평가하여

    조건부 연산의 결과는 중지하기 전에 마지막으로 평가됩니다. sarily boolean)

    !!(...), 예를 주위에 실제boolean, 당신은 포장 수있는 모든 것을 반환 강제로 : 당신이이`!`사용하여 boolean` 반환 강제 할 수

    alert(typeof !!(...) === "boolean"); //will always be true no matter what conditions are inside