다음과 같이 JavaScript 부울 변수를 선언하면 :
var IsLoggedIn;
그런 다음 true
또는 로 초기화하면 1
안전합니까? 아니면 초기화 1
하면 변수가 숫자가 될까요?
답변
유형은 초기화에 따라 다릅니다.
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
그러나이 예를 살펴보십시오.
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
변수 유형은 JavaScript에서 할당 된 값에 따라 다릅니다.
답변
아니 안전하지 않습니다. 나중에 var를 수행 할 수 IsLoggedIn = "Foo";
있으며 JavaScript는 오류를 발생시키지 않습니다.
할 수 있습니다
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
부울이 아닌 변수를에 전달할 수도 있으며 new Boolean()
IsLoggedIn을 부울로 만듭니다.
var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true
답변
이 매우 유용한 튜토리얼 은 다음과 같이 말합니다.
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
답변
당신이 원하는 경우 IsLoggedIn
다음과 같이 초기화 할 필요가 부울로 취급 :
var IsLoggedIn=true;
로 초기화 var IsLoggedIn=1;
하면 정수로 처리됩니다.
그러나 언제든지 변수 IsLoggedIn
는 다른 데이터 유형을 참조 할 수 있습니다.
IsLoggedIn="Hello World";
이것은 오류를 일으키지 않습니다.
답변
최소한 ‘정의’에 대해 초기화되지 않은 변수를 사용하고 테스트 할 수 있습니다 . 이렇게 :
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
더구나 많은 가능성이 있습니다. 정확한 유형에 관심이 없다면 비교를 위해 ‘==’연산자 (또는! [변수] / !! [변수])를 사용하십시오 (이것이 Douglas Crockford가 ‘truthy’또는 ‘ 가짜라고 생각합니다). 이 경우 true 또는 1 또는 ‘1’을 단위 화 된 변수에 할당하면 요청시 항상 true가 반환됩니다. 그렇지 않으면 [유형 안전 비교가 필요한 경우] 비교를 위해 ‘===’를 사용하십시오.
var thisMayBeTrue;
thisMayBeTrue = 1;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
thisMayBeTrue = '1';
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, in this case, using == or !! '1' is implicitly
// converted to 1 and 1 is implicitly converted to true)
thisMayBeTrue = true;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> true
thisMayBeTrue = 'true';
alert(thisMayBeTrue == true); //=> false
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, here's no implicit conversion of the string 'true'
// it's also a demonstration of the fact that the
// ! or !! operator tests the 'definedness' of a variable.
추신 : 존재하지 않는 변수에 대해서는 ‘정의성’을 테스트 할 수 없습니다. 그래서:
alert(!!HelloWorld);
참조 오류를 제공합니다 ( ‘HelloWorld가 정의되지 않았습니다’).
( ‘정의’에 대한 더 좋은 단어가 있습니까? 어쨌든 내 네덜란드어를 용서하십시오. ~)
답변
자바 스크립트의 변수에는 유형이 없습니다. 0이 아니고 널이 아니고 비어 있지 않으며 true
“true”입니다. 0, null, 정의되지 않은 빈 문자열이며 false
“false”입니다.
리터럴 true
및 false
.
답변
다음과 같은 것은 어떻습니까?
var MyNamespace = {
convertToBoolean: function (value) {
//VALIDATE INPUT
if (typeof value === 'undefined' || value === null) return false;
//DETERMINE BOOLEAN VALUE FROM STRING
if (typeof value === 'string') {
switch (value.toLowerCase()) {
case 'true':
case 'yes':
case '1':
return true;
case 'false':
case 'no':
case '0':
return false;
}
}
//RETURN DEFAULT HANDLER
return Boolean(value);
}
};
그런 다음 다음과 같이 사용할 수 있습니다.
MyNamespace.convertToBoolean('true') //true
MyNamespace.convertToBoolean('no') //false
MyNamespace.convertToBoolean('1') //true
MyNamespace.convertToBoolean(0) //false
성능을 테스트하지는 않았지만 유형에서 유형으로 변환하는 일이 너무 자주 발생해서는 안됩니다. 그렇지 않으면 앱이 크게 불안정해질 수 있습니다!