应用于表示负十六进制的字符串的 JS 一元加运算符的行为
Behavior of JS unary plus operator applied on a string representing a negative hex
根据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-]到数字转换,该值接受十六进制数 - 但不接受负十六进制数。
相关文章:
- 这是什么 ==- javascript 运算符
- jQuery/JS包含运算符或类似运算符
- Javascript逻辑运算符和字符串/数字
- 模运算符前的双水平线
- jQuery's trim()的前缀为not运算符
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- 用于验证JS中逻辑运算符表达式的正则表达式
- 什么's是相当于LINQ's SelectMany运算符
- JavaScript-===vs===运算符性能
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 三元运算符检查多个字符串
- 调用C++中JScript中的instanceof运算符(IDispatch/IDispatchEx)
- ||(OR)运算符如何在赋值中工作
- 在 JavaScript 对象中设置要使用的运算符的属性
- 解释javascript中的+var和-var一元运算符
- 应用于表示负十六进制的字符串的 JS 一元加运算符的行为
- 考虑到最佳实践,我们可以使用双一元运算符吗!在JavaScript中