首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果(obj !== obj)做了什么?

如果(obj !== obj)做了什么?
EN

Stack Overflow用户
提问于 2011-02-03 03:44:47
回答 3查看 163关注 0票数 2

this page中,您可以看到如何为数组实现indexOf的以下示例:

代码语言:javascript
复制
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

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

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n)    // <-- code of interest
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k++)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

我的问题是关于这条线:

代码语言:javascript
复制
if (n !== n)

在哪种情况下,此布尔表达式将返回true

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-03 03:48:21

这是验证数字是否为NaN的快捷方式。

假设你有n = Number("string");,那么n !== n的计算结果就是true

在这种情况下,您可以使用if(isNaN(n))而不是if(n !== n)

票数 4
EN

Stack Overflow用户

发布于 2011-02-03 03:48:48

这就是检查NaN的方法。他们这样做可能是为了预防,因为可能会覆盖全局函数isNaN

票数 2
EN

Stack Overflow用户

发布于 2011-02-03 04:01:24

//大多数情况下,您不需要尝试如此精确地模拟规范-

代码语言:javascript
复制
if(!Array.prototype.indexOf){ 
    Array.prototype.indexOf= function(what, i){
        if(i==undefined || isNaN(i)) i= 0;
        var L= this.length;
        while(i< L){
            if(this[i]=== what) return i;
            ++i;
        }
        return -1;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4879065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档