if 문에서 부울 값
오늘 저는 학교 과제에서 변수가 참인지 거짓인지 확인하는 방식을 고려하여 코드에 대한 언급을 받았습니다.
제가 작성한 코드는 다음과 같습니다.
var booleanValue = true;
function someFunction(){
if(booleanValue === true){
return "something";
}
}
그들은 이렇게 쓰는 것이 더 낫다고 말했습니다.
var booleanValue = true;
function someFunction(){
if(booleanValue){
return "something";
}
}
"=== true" 부분에 대해 제가 들은 말은 필요 없고 혼란을 일으킬 수 있다는 것이었습니다.
하지만 자바스크립트가 느슨한 언어이기 때문에 변수가 부울인지 아닌지 확인하는 것이 더 낫다는 것이 제 생각입니다.
두 번째 예에서 문자열은 또한 "something"을 반환합니다.
질문입니다. 앞으로 "=== 참" 부분을 느슨하게 하는 것이 더 나은가요, 아니면 변수의 유형도 확인하는 것이 좋은 관행인가요?
편집: "실제" 코드에서 부울은 이미지가 삭제되었는지 여부를 나타내므로 boolValue가 가져야 하는 유일한 값은 true 또는 false입니다.
예를 들어 0과 1은 해당 변수에 있으면 안 됩니다.
우선, 사실은 다음과 같습니다.
if (booleanValue)
만족시킬 것입니다.if
의 진 한 가 대 진 술 한 에 치 실 ▁tr ▁of의 진실한 값에 문장.booleanValue
포하여를 true
0이 아닌 숫자, 비어 있지 않은 문자열 값, 개체 또는 배열 참조 등...
반면에:
if (booleanValue === true)
은 이은오만할것다니입족직것▁the▁satisfy다니것▁only▁this입▁will할이만 만족시킬 것입니다.if
if 건이만 약조만booleanValue
는 정히같습다니확와다▁exactly와 .true
그 어떤 진실한 가치도 그것을 만족시키지 못할 것입니다.
반면에 이 작업을 수행할 경우:
if (someVar == true)
그런 다음 Javascript가 하는 것은 type corcely입니다.true
의 someVar
그런 다음 두 변수를 비교합니다.이것이 의도한 것이 아닐 가능성이 높은 상황이 많이 있습니다.이 때문에 대부분의 경우 당신이 피하고 싶은 것은==
자바스크립트가 두 가지를 같은 유형으로 강제하는 방법에 대한 꽤 긴 규칙이 있기 때문입니다. 그리고 당신이 그 모든 규칙을 이해하고 JS 인터프리터가 두 가지 다른 유형(대부분의 JS 개발자가 할 수 없는)이 주어졌을 때 할 수 있는 모든 것을 예상할 수 없다면, 당신은 아마도 피하고 싶을 것입니다.==
전적으로.
얼마나 혼란스러울 수 있는지를 보여주는 예:
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
위여하치여▁for하위▁the▁value2
은 고라생것입다니할각라고 생각할 것입니다.2
진정한 가치이므로 보다 유리하게 비교할 수 있습니다.true
하지만 강제성은 그런 식으로 작용하지 않습니다. 값의 하는 것입니다.true
라는 1
그래서 비교하는 것입니다.2 == 1
당신이 의도했던 것과는 확실히 다릅니다.
그러니 구매자는 조심해야 합니다.피해보는 것이 가장 좋을 것 같습니다.==
비교할 유형을 명시적으로 알고 가능한 모든 유형의 강제 알고리즘이 작동하는 방식을 알지 않는 한 거의 모든 경우에 해당합니다.
따라서 이 값은 다음에 대한 예상 값에 따라 달라집니다.booleanValue
코드가 작동하는 방식을 확인할 수 있습니다.만약 당신이 그것이 단지 영원히 있을 것이라는 것을 미리 안다면.true
또는false
값, 그리고 그것을 명시적으로 비교합니다.
if (booleanValue === true)
단지 추가 코드일 뿐이고 불필요합니다.
if (booleanValue)
보다 컴팩트하고 깔끔함/우수함을 자랑합니다.
반면에, 만약 당신이 그것을 모른다면,booleanValue
그럴 수도 있고 당신은 그것이 정말로 설정되어 있는지 테스트하고 싶어합니다.true
다른 자동 유형 변환이 허용되지 않는 경우
if (booleanValue === true)
이것은 좋은 생각일 뿐만 아니라 필수입니다.
를 들어, 를들어살, 의구을면보펴현예ation의 을 보면,.on()
jQuery에서 반환 값은 선택적입니다.콜백이 반환되는 경우false
그러면 jQuery가 이벤트 전파를 자동으로 중지합니다.이 특정한 경우에, jQuery는 오직 전파를 중지하기를 원하기 때문에,false
합니다. 그들은 반환 값의 명확성을 확인합니다.=== false
그들때문이지원않기에하때▁they에문▁because▁don않기▁wantt.undefined
또는0
또는""
또는 비교를 충족하기 위해 자동으로 false로 입력되는 기타 항목.
예를 들어, 콜백 코드를 처리하는 jQuery 이벤트는 다음과 같습니다.
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
으로 "jQuery"를 찾고 있음을 알 수 있습니다.ret === false
.
그러나 jQuery 코드에는 코드의 요구를 고려할 때 더 간단한 검사가 적합한 다른 많은 위치도 있습니다.예:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...
다음을 작성하는 경우:if(x === true)
= = true인 됩니다.
다음을 작성하는 경우:if(x)
"(빈 문자열), false, null, defined, 0, NaN이 아닌 모든 x에 대해 참입니다.
일반적으로, 다음을 생략하는 것이 더 깨끗하고 간단합니다.=== true
.
그러나 Javascript에서는 이러한 문장이 다릅니다.
if (booleanValue)
다음과 같은 경우 실행됩니다.booleanValue
진실성 – 이외의 모든 것.0
,false
,''
,NaN
,null
,그리고.undefined
.
if (booleanValue === true)
다음 경우에만 실행됩니다.booleanValue
는 확히와 같음정과 .true
.
일반적인 "if"에서는 변수가 부울 변수로 강제되고 객체에 대해 부울 변수를 사용합니다.
Argument Type Result
Undefined false
Null false
Boolean The result equals the input argument (no conversion).
Number The result is false if the argument is +0, −0, or NaN;
otherwise the result is true.
String The result is false if the argument is the empty
String (its length is zero); otherwise the result is true.
Object true.
그러나 ===과의 비교에는 강제성이 없으므로 강제성 없이 동등해야 합니다.
객체가 부울이 아닐 수도 있다고 말하는 경우 true/false 이상을 고려해야 할 수도 있습니다.
if(x===true){
...
} else if(x===false){
....
} else {
....
}
사용 사례에 따라 다릅니다.종류도 확인하는 것이 말이 될 수 있지만, 그냥 깃발이라면 그렇지 않습니다.
변수가 부울 값만 가질 수 있다면 짧은 구문을 사용하는 것이 합리적입니다.
잠재적으로 다른 유형을 할당할 수 있으며 구별해야 하는 경우true
1
또는"foo"
그렇다면 당신은 사용해야 합니다.=== true
.
체성(===)
연가동작합니다게와 합니다.(==)
형식 변환이 수행되지 않은 경우를 제외하고 연산자이며, 형식이 동일해야 동일한 것으로 간주됩니다.
확인된 값이 다음과 같기 때문입니다.Boolean
을 덜 할 , 했습니다.==true
당신이 이미 bool로 명확하게 초기화했기 때문에, 나는 생각합니다.===
연산자가 필요하지 않습니다.
저는 당신의 추론이 옳다고 생각합니다.하지만 실제로 저는 다음을 생략하는 것이 훨씬 더 흔하다는 것을 발견했습니다.===
.그 는 세 가 있다고 생각합니다.저는 그것에 대한 세 가지 이유가 있다고 생각합니다.
- 일반적으로 이 값은 식의 의미에 추가되지 않습니다. 즉, 값이 부울 값으로 알려진 경우입니다.
- 이 많기 치 못한 자바스크립트가 했을 때 은 당신을 .
undefined
또는null
▁(▁▁i▁with▁this"▁try▁the. (이 관점과 "fail fast" 균형을 맞추려고 하지만)(그러나 저는 이 관점과 "빠른 실패" 모토의 균형을 맞추려고 노력합니다.) - 자바스크립트 프로그래머들은 우리가 할 수 있기 때문에 - 특히 부울식에서 - 유형을 빨리 풀어서 노는 것을 좋아합니다.
이 예를 고려해 보십시오.
var someString = getInput();
var normalized = someString && trim(someString);
// trim() removes leading and trailing whitespace
if (normalized) {
submitInput(normalized);
}
저는 이런 종류의 코드가 드물지 않다고 생각합니다.다음과 같은 경우를 처리합니다.getInput()
아온다를 합니다.undefined
,null
또는 빈 문자열.두 개의 부울 평가로 인해submitInput()
지정된 입력이 공백이 아닌 문자를 포함하는 문자열인 경우에만 호출됩니다.
&&
첫 번째 인수가 거짓이면 반환하고 첫 번째 인수가 진실이면 두 번째 인수를 반환합니다.normalized
▁▁be 될 것입니다.undefined
한다면someString
정의되지 않았습니다.즉, 위의 부울식에 대한 입력은 실제로 부울 값이 아닙니다.
강력한 유형 검사에 익숙한 많은 프로그래머들이 이런 코드를 보면 움츠러든다는 것을 알고 있습니다.그러나 강력한 타이핑을 적용하려면 다음에 대한 명시적인 확인이 필요할 수 있습니다.null
또는undefined
값을 입력하면 코드가 혼란스러워집니다.JavaScript에서는 필요하지 않습니다.
자바스크립트에서 부울의 개념은 상당히 모호합니다.고려 사항:
var bool = 0
if(bool){..} //evaluates to false
if(//uninitialized var) //evaluates to false
따라서 if 문(또는 다른 관리 문)을 사용할 때는 "boolean" 유형의 var를 사용할 필요가 없습니다.따라서, 제 생각에, 당신의 진술의 "=== 참" 부분은 부울적인 것을 알고 있다면 불필요하지만, 당신의 가치가 모호한 "진실" 변수라면 절대적으로 필요합니다.자바스크립트 불리언에 대한 더 많은 정보는 여기에서 찾을 수 있습니다.
Boolean 할객체로 .error={Boolean(errors.email)}
상황에 따라 다릅니다.변수가 TRUE로 해결될 수 있다는 우려가 있는 경우.그렇다면 열심히 점검하는 것이 필수입니다.그렇지 않으면 그것은 당신에게 달려 있습니다. 저는 하만구, 이문그라는 스럽습니다.whatever == TRUE
자신들이 무엇을 하고 있는지 아는 사람들을 혼란스럽게 할 수도 있습니다.
Revisa https://www.w3schools.com/js/js_comparisons.asp
예:
var p=5;
p==5 ? true
p=="5" ? true
p==="5" ? false
동일한 유형의 동일한 값 == 동일한 값을 의미합니다.
언급URL : https://stackoverflow.com/questions/15393935/boolean-in-an-if-statement
'programing' 카테고리의 다른 글
서브를 실행하면 어떻게 됩니까? (0) | 2023.07.24 |
---|---|
Ajax에서 사용자 지정 HTTP 헤더 응답을 가져올 수 없음 getAllResponseHeaders (0) | 2023.07.24 |
PLS-00231:함수는 SQL에서 사용할 수 없습니다. (0) | 2023.07.24 |
PowerShell에서 어레이의 어레이에 어레이 추가 (0) | 2023.07.24 |
최대 절전 모드에서 Oracle Date를 사용하는 경우 날짜/시간에 대한 Java 유형 (0) | 2023.07.24 |