6

根据 MDN,使用一元加号运算符时:

支持十进制和十六进制(“0x”前缀)格式的整数。支持负数(虽然不支持十六进制)。如果它无法解析特定值,它将评估为 NaN。

但是当我运行这个 Jasmine 测试时(toBe()匹配器应用一个===运算符):

   it("should return NaN when trying to convert a string representing a NEGATIVE HEX to the corresponding number", function() {
    var a = '-0xFF';        
    expect(typeof +a).toBe('number');
    expect(isNaN(+a)).toBeTruthy(); //Fails on Chrome and Opera...
  });

它在 Chrome 和 Opera 上失败(并在 IE、Safari 和 Firefox 中通过)。

这是 Chrome 和 Opera 引擎的缺陷还是我遗漏了什么?

4

2 回答 2

2

它可能 - 或可能不会被视为缺陷,这取决于一个人如何附加到规范。)

我发现了一个关于这种行为的有趣讨论。看起来 Firefox 曾经一度处于“优于规范”的阵营,但随后根据规范对其进行了修复。

于 2012-04-27T09:58:17.077 回答
1

根据EcmaScript 规范,一元运算+符将[String-]to-Number-conversion应用于值(此处为字符串),它接受十六进制数字 - 但不接受负十六进制数字。

于 2012-04-27T10:04:08.880 回答