【问题标题】:How does JavaScript compare a number to a string?JavaScript 如何将数字与字符串进行比较?
【发布时间】:2013-09-27 13:54:43
【问题描述】:

我知道===的意思:它会检查操作数是否相同,所以

  • 1 === '1' 会给false
  • 1 == '1' 会给true

但是typeof 1numbertypeof '1'string,那么JavaScript 如何比较1 == '1'?是否有任何转换发生?如果有,有哪些?

【问题讨论】:

标签: javascript comparison comparison-operators


【解决方案1】:

如果类型是数字和字符串,

JavaScript 会将字符串转换为数字。

Annotated ECMAScript 5.1:

比较 x == y,其中 x 和 y 是值,产生 true 或 错误的。这样的比较是这样进行的:

...

5。如果 Type(x) 是 Number 并且 Type(y) 是 String,则返回 比较 x == ToNumber(y)。 6. 如果 Type(x) 是 String 并且 Type(y) 是 Number,返回比较结果 ToNumber(x) == y。

【讨论】:

  • 不是用 parseInt 转换的,ToNumber 的行为不同。
  • @bfavaretto JavaScript 中没有 ToNumber
  • 这是规范中定义的内部操作,不暴露给语言。见es5.github.io/#x9.3
  • 其实我刚才说的不对:是通过Number构造函数es5.github.io/#x15.7.1间接暴露出来的
【解决方案2】:

使用字符串()

它在进行比较之前将输入转换为字符串。

例子:

var test1= 1;
var test2= "1";

var answer = String(test1) === String(test2);

在这种情况下,Answer 将等于 true。

【讨论】:

  • 是的,但是如果你只输入 1 == '1' 就会是真的,那么javascript怎么比较呢? javascript 会自动将 test1 转换为字符串吗?
  • 这更好地回答了您的问题,我以为您想知道如何在比较之前转换值! stackoverflow.com/a/7625195/2509123
【解决方案3】:

您可以使用1 == parseInt("1") 将字符串解析为整数。

【讨论】:

  • 是的,但是如果你不解析字符串,如果你只使用 1 == '1',它会说 true
  • 你问如果你不做 parseInt 它是否会说真的?
  • 是的,这是真的。就像 PHP 一样,如果你做了 1 === '1' 那么它会返回 false。
  • 使用基数 1?这到底是怎么回事?基数需要在 2 到 36 之间。
  • @SimonAndréForsberg 我不熟悉 1 的基数。我在 firebug 中使用 1 === '1' 做了一个 console.log,它返回 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2016-01-16
  • 2018-07-11
  • 2022-08-14
相关资源
最近更新 更多