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

Behavior of JS unary plus operator applied on a string representing a negative hex

本文关键字:一元 运算符 表示 十六进制 字符串 应用于 JS      更新时间:2023-09-26

根据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引擎的缺陷还是我错过了什么?

它可能 - 也可能不被视为缺陷,这取决于如何附加到规范。

我发现了一个关于这种行为的有趣讨论。看起来 Firefox 曾经处于"优于规格"阵营,但随后根据规格修复了它。

根据 EcmaScript 规范,一元+运算符对值(此处为字符串)应用 [String-]到数字转换,该值接受十六进制数 - 但不接受负十六进制数。