You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于isNaN("12")返回false、12与"12"相等及字符串差异的技术咨询

让我一步步帮你搞清楚这些JavaScript里的常见疑问:

1. 为什么isNaN("12")的计算结果为false?

首先得明确isNaN()函数的工作逻辑:它不会直接判断参数是不是NaN,而是先尝试把参数转换成数字类型,如果转换后的结果是NaN,才返回true,否则返回false。

对于字符串"12"来说,它可以被JavaScript成功转换成数字12(这是一个有效的数值,不是NaN),所以isNaN("12")就返回了false。

结合你给出的代码例子来看:

function sanitise(x) { 
  if (isNaN(x)) { 
    return NaN; 
  } 
  return x; 
} 
var a = "12" 
var b = 12 
console.log(typeof(a)) 
console.log(sanitise(a)); 
console.log(sanitise(b)); 

当调用sanitise(a)时,因为isNaN("12")是false,所以函数直接返回原字符串"12",这就是你看到的输出结果:

"string"
"12"
12

2. 为什么JavaScript会将数值12和字符串"12"视为相等?

这是因为JavaScript的宽松相等运算符(==)会触发隐式类型转换。当你用==比较不同类型的值时,JS会按照特定规则先把它们转换成相同类型,再比较:

  • 当数字和字符串比较时,字符串会被自动转换成数字。

所以12 == "12"的过程是:先把"12"转换成数字12,然后比较12和12,结果自然是true。

如果你不想触发类型转换,应该用严格相等运算符(===),它会同时比较值和类型,12 === "12"就会返回false。

3. 字符串"12"与普通字符串"string"之间的区别是什么?

这两个字符串的核心区别在于是否能被有效转换为数字:

  • "12"是一个"数字型字符串",它可以被隐式或显式转换成有效的数值12。比如+"12"会得到12,isNaN("12")返回false。
  • "string"是普通文本字符串,尝试转换成数字时会得到NaN(非数字)。比如+"string"返回NaN,isNaN("string")返回true。

反映到你的sanitise函数里:如果传入"string",isNaN("string")是true,函数会返回NaN;而传入"12"则会返回原字符串。

另外,在涉及算术运算时两者表现也不同:比如"12" * 2会得到24(先转数字再运算),但"string" * 2会得到NaN。

内容的提问来源于stack exchange,提问作者Shuai Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:43:02