JS一元加运算符的行为应用于表示负十六进制的字符串

mam*_*moo 6 javascript hex numbers

根据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...
  });
Run Code Online (Sandbox Code Playgroud)

它在Chrome和Opera上失败(并在IE,Safari和Firefox中传递).

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

rai*_*7ow 2

它可能会被视为缺陷,也可能不会被视为缺陷,具体取决于人们对规范的重视程度。)

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