Javascript 为什么要在Array.prototype.forEach()中检查null?

Javascript 为什么要在Array.prototype.forEach()中检查null?,javascript,arrays,foreach,Javascript,Arrays,Foreach,在for Array.prototype.forEach()中 我无法想象会发生this==null的情况。你能给我举个例子吗?谢谢。,因为您可以使用//like在javascript中传递此的自定义值 因为您可以使用//like在javascript中为this传递自定义值 您需要共享问题中的代码。。而不是代码片段的映像pollyfill试图一步一步地实现规范。ToObject没有确切的等价物,如果传递Null或未定义,它应该抛出TypeError。最接近的是调用对象(this),如果传递Nu

在for Array.prototype.forEach()中


我无法想象会发生
this==null
的情况。你能给我举个例子吗?谢谢。

,因为您可以使用//like在javascript中传递此的自定义值


因为您可以使用//like在javascript中为
this
传递自定义值


您需要共享问题中的代码。。而不是代码片段的映像pollyfill试图一步一步地实现规范。ToObject没有确切的等价物,如果传递Null或未定义,它应该抛出TypeError。最接近的是调用对象(this),如果传递Null或未定义,则该对象的行为不相同,因此测试将在算法的步骤1抛出正确类型的错误。步骤1注释应该在this==null测试之前。无论如何,我认为这是错误的,因为如果这是
0
,它将无法通过测试,但不应该。该方法是通用的,因此必须格外小心输入。例:
[].map.call(“123”,Number)
还请注意,所有额外的检查都会使那些“官方”多边形填充的速度非常慢,而不是说,
。.forEach
您需要共享问题中的代码。。而不是代码片段的映像pollyfill试图一步一步地实现规范。ToObject没有确切的等价物,如果传递Null或未定义,它应该抛出TypeError。最接近的是调用对象(this),如果传递Null或未定义,则该对象的行为不相同,因此测试将在算法的步骤1抛出正确类型的错误。步骤1注释应该在this==null测试之前。无论如何,我认为这是错误的,因为如果这是
0
,它将无法通过测试,但不应该。该方法是通用的,因此必须格外小心输入。例如:
[].map.call(“123”,Number)
还需要注意的是,所有额外的检查都使得那些“官方”多边形填充比说,
\uuu.forEach
// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.io/#x15.4.4.18
if (!Array.prototype.forEach) {

  Array.prototype.forEach = function(callback, thisArg) {

    var T, k;

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

    // 1. Let O be the result of calling toObject() passing the
    // |this| value as the argument.
    var O = Object(this);

    // 2. Let lenValue be the result of calling the Get() internal
    // method of O with the argument "length".
    // 3. Let len be toUint32(lenValue).
    var len = O.length >>> 0;
[].forEach.call(null, function(){})