【问题标题】:JavaScript: How to circumvent the typeof NaN issue? [closed]JavaScript:如何规避 typeof NaN 问题? [关闭]
【发布时间】:2016-07-30 08:33:06
【问题描述】:
console.log(typeof NaN)

以上返回“数字”。

Q1.我该如何解决这个问题?

Q2. 找到变量类型的更好方法是什么? (而不是typeof

谢谢!

更新: 谢谢你们所有的cmets。但是第一个回答者理解了我的问题。我担心评估“NaN”返回语句的类型以不显示为“数字”。

我在 if 语句中使用 typeof() 来执行 if(typeof(x) == "number") { do this.. }

但是即使 x 是 NaN,条件也通过了。我想解决这个问题。

我不知道“NaN”是“数字”类型,因为 NaN 表示“不是数字”。这导致了混乱。

对于我没有明确我想问的问题,我深表歉意。但是我的问题解决了。

谢谢大家!

【问题讨论】:

  • 第一季度。怎么办? typeof 返回规范所说的内容? 2. 使用 typeof 有什么问题?
  • NaN 是数字类型。你想做什么?
  • @Sunny - 根据规范。 NaN 是 Number 类型。但是上面的方法对于 null 和数组都将失败。请参阅下面的答案。
  • 为什么typeof NaN 不是是'数字'?

标签: javascript typeof


【解决方案1】:

如果你想检查一个数字是否不是NaN,你可能需要使用isNaN函数:

var val = 4

console.log(isNaN(val)) // false

var val2 = NaN

console.log(isNaN(val2)) // true

要检查变量是否包含数字而不是 NaN,您可以使用以下命令:

typeof val === 'number' && !isNAN(val)

【讨论】:

  • 但请注意isNaN(undefined)true
  • 这也有帮助。谢谢!
【解决方案2】:

除非需要速度,否则不要使用 typeof,它对数组和 null 都失败。但是根据规范,NaN 实际上是 Number 类型。

使用

var getType = function (obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
};

【讨论】:

  • 参考错误:Pub 未定义。
  • 还有:什么?似乎只返回第一个字母大写的 typeof。包括 Nan --> "Number" 这似乎是 OP 的抱怨。它在内部调用 typeof 我很确定。这无论如何都不是“更好”。
  • 这是来自图书馆。我已对其进行了编辑,供您单独使用。
  • 感谢您理解我的问题。这样就解决了!谢谢!
猜你喜欢
  • 2014-08-13
  • 2016-12-31
  • 2013-11-17
  • 2012-03-18
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2021-10-13
相关资源
最近更新 更多