2016-07-10 3 views
0

이 두 함수는 기능면에서 동등한가요? 그렇다면 어떻게 중요합니까?부울() 함수를 이해하지 못합니다.

arr.filter(function(val){ 
    return Boolean(val) 
}); 

arr.filter(Boolean); 

또한이 두 기능적으로 동일합니까?

var x = new Boolean(expression); 

var x = Boolean(expression); 
+1

['new'] (HTTPS에 전달하기 전에 val를 조작 예를 들어, 부울 val를 반환/처리하기 전에 다른 일을 할 수 있습니다. org/ko-ko/docs/Web/JavaScript/Reference/Operators/new) 객체의 인스턴스를 만듭니다. –

+0

'console.log'에 해당 값을 넣고 테스트하십시오.'new'는 항상'object'를 반환 할 것입니다. – Rayon

답변

4

을 사용하는 하나는 부울의 인스턴스를 만들고 다른 하나는 전달 된 것과 동일한 부울을 반환합니다. 예를 들어 사실/거짓 값을 실제 부울 true/false 값으로 설정합니다.

console.log("Is instance: ", (new Boolean(true)) instanceof Boolean); 
 
console.log("Is not instance: ", Boolean(true) instanceof Boolean); 
 

 
console.log("truthy to bool: ", Boolean(-1)); 
 
console.log("falsey to bool: ", Boolean(0)); 
 
console.log("falsey to bool: ", Boolean("")); 
 
console.log("truthy to bool: ", Boolean("test"));

그들은 또한 조건문에서 사용 할 방법이 다르다. 예를 들어 원시 부울 값은 당신이

if(true) // 
if(false) // 

조건

에서 혼자 사용할 수 있습니다하지만 당신은 혼자가 부울 인스턴스와 테스트하려고하면이 객체이며, 모든 객체가 truthy 한, 조건은 항상 true 될 것입니다, 심지어 빈 객체 두 경우 모두 부울 값이 filter 내부로 돌아갑니다 때문에이 같은 일이 발생한다는 점에서

var d = new Boolean(false); 
if(d){ 
    console.log("Gets called even though the Boolean instance holds a false value"); 
} 

첫 번째는 동일합니다

. 여기
arr.filter(Boolean); 

Boolean

콜백 방법으로 사용하고 부울의 반환 값에서 직접 반환 값을 취한다.

콜백 방법 등 값 간접적 Boolean에서 반환로서 익명 함수를 사용

arr.filter(function(val){ 
    return Boolean(val) 
}); 

하는 동안. 그러나 두 경우 모두 값이 Boolean으로 전달 된 다음 결과가 동일하도록 반환됩니다. 아래는 동일하지 않을 것이지만

참고 :

위에서 언급 한 바와 같이
arr.filter(function(val){ 
    return new Boolean(val); 
}); 

, 부울의 인스턴스는 객체이며, 그것은 항상 truthy 값이됩니다. 위의 예에서 배열의 모든 요소는 테스트를 통과하므로 필터링하려고했던 것과 동일한 배열로 끝납니다.//developer.mozilla :

익명 함수의 사용은 당신이 궁극적으로 Boolean

+0

고마워요. –

0

첫 번째 조각, 이 기능적으로 동일합니다.

두 번째 버전 이러한 결과는 서로 다른 값을 갖습니다. 첫 번째는 true/false 값을 갖는 Boolean 오브젝트 인스턴스가되고, 두 번째는 프리미티브 truthy/falsey 값이됩니다.

자세히 알아보기 here.

+0

첫 번째 스 니펫, 어떻게? –

관련 문제