Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Triple等于js中的比较和数组长度_Javascript_Underscore.js - Fatal编程技术网

Javascript Triple等于js中的比较和数组长度

Javascript Triple等于js中的比较和数组长度,javascript,underscore.js,Javascript,Underscore.js,最后,我通过浏览代码来学习JavaScript习惯用法,我发现了每个函数的以下定义: var each = _.each = _.forEach = function(obj, iterator, context) { if (obj == null) return; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); }

最后,我通过浏览代码来学习JavaScript习惯用法,我发现了
每个
函数的以下定义:

var each = _.each = _.forEach = function(obj, iterator, context) {
    if (obj == null) return;
    if (nativeForEach && obj.forEach === nativeForEach) {
        obj.forEach(iterator, context);
    } else if (obj.length === +obj.length) {
        for (var i = 0, l = obj.length; i < l; i++) {
            if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
        }
    } else {
        for (var key in obj) {
            if (hasOwnProperty.call(obj, key)) {
                if (iterator.call(context, obj[key], key, obj) === breaker) return;
            }
        }
    }
};

+obj.length将返回一个数值。==比较对象的类型及其值。换句话说,它执行严格的比较

这一行:

else if (obj.length === +obj.length) {
是必要的,因为

typeof []
会回来的

object

每个
方法都接受集合(数组或对象)

检查本机方法forEach是否可用后,该方法检查
obj
是否为数组。这不可能使用
typeof
,因为typeof将为数组以及对象返回
“object”
(请尝试
typeof[]==typeof{}
)。因此,他们使用了
obj.length===+obj.length
方法


这是因为如果
obj
没有
length
属性,
+obj.length
返回
NaN
,严格比较失败。然后,该方法假设
obj
是一个
对象

,这似乎是一种测试对象的长度属性是否为数字而不是NaN的方法。在ECMA_262中,我看不到长度属性必须是数字的任何地方,尽管它应该是一。函数在中间叉中看起来有缺陷,稀疏数组将在测试之前失败,在长度达到之前。行,我知道行检查对象是否具有属性长度,并且如果这个属性具有数值。因此,为什么这里没有使用
typeof
操作符?例如,
typeof obj.length==“number”
object