2014-09-01 4 views
0

developer.mozilla의 웹 사이트에 표시된 많은 방법에서 필수적인 판단이 없음을 발견했습니다.
URL : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter이 판단은 Array.prototype.filter에서 필수적입니까?

"Polyfill"섹션으로 전달할 수 있습니다.

항상 다음 코드와 같은 판단이 존재합니다 또한

Array.prototype.filter = function(fun /*, thisArg */) 
{ 
    "use strict"; 

    if (this === void 0 || this === null) 
     throw new TypeError(); 
    ... 
} 

뿐만 아니라 필터 방법,하지만를 Array.prototype.every(), Array.prototype.map().
예를 들면 :

Array.prototype.map = function (fun /*, thisp */) { 
    if (this === void 0 || this === null) { throw TypeError(); 
    ... 
} 

나는 어떤 경우에 조건의 결과가 "형식 오류"를 던져 다음 true를 반환하고 알고하지 않습니다.
제 생각에는이 판단은 필수적이지 않으며 제거되어야합니다. 당신은 어떻게 생각하십니까? 그리고이 판단은 무엇을위한 것입니까?

+3

"심판은"아마 당신이 찾고있는 단어가 아닙니다. "상태"를 의미합니까? – deceze

+0

네, "조건"을 의미합니다 –

답변

1

어떤 경우에는 조건 결과가 을 반환하고 "TypeError"를 throw합니다.

답변 :

Array.prototype.filter = function(fun /*, thisArg */){ 
    console.log('okay',this==null); 
} 
Array.prototype.filter.call(null); 
Array.prototype.filter.call(undefined); 
+0

답변 해 주셔서 감사합니다. 하지만 호출하는 메서드를 사용하는 것을 이해하지 못합니다. 조건이 true를 반환한다는 것을 어떻게 증명할 수 있습니까? –

+0

@edmond 다음과 같은 배열과 같은 배열에서 사용할 수 있습니다. getElementsByTagName https://developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByTagName 조건을 추가하면 사실임을 알 수 있습니다. – HMR

+0

감사합니다. 너의 인내심을 위해서. 네가 나에게주는 URL을 봤어. 더 자세히 설명해 주시겠습니까? getElementByTagName 메소드가 Array.prototype.filter를 호출한다는 것을 의미합니까? –

1

은 어레이 자체를 나타냅니다.

void 0undefined을 반환하며 덮어 쓸 수 없습니다 (undefined 수 - 이전 ES5).

이 검사는 프로토 타입 방법이 실제로 존재하는 즉, 정의되지 않았거나 널 (null)이 아닌 것에 사용되는지 결정하는 데 사용됩니다. 당신이 MDN's 최신 polyfill 보면

, 그들은 단순히 사용 null == undefined 이후

if (this == null) { 
    throw new TypeError(" this is null or not defined"); 
} 

true입니다.

+0

답변 해 주셔서 감사합니다. MDN의 최신 polyfill이 사용자가보고있는 것으로 업데이트되었음을 ​​발견했습니다. 제 생각에는 "undefined.filter"또는 "null.filter"는 Array.prototype.filter()로 바뀌지 않으므로 조건은 필수적이지 않습니다. –