1

我的 javascript 运行了相当长的一段时间,并且在 IE 或早期版本的 firefox 中从未遇到任何问题。然而,在 Firefox 5.0 中,如果失败。

笔记!该公式已被删除以简化示例,因为我已确认该公式正在工作并产生预期的结果。

<script type="text/javascript">
    function NaN(Num) {
        return (isNaN(Num) || Num == Infinity || Num == -Infinity ? "n/a" : Num);
    }

    function CalculateFormula() {
        result = NaN(*formula*);
    }

</script>

当要调用 NaN 函数时,javascript 就退出。它在 IE 中就像一个魅力,但为了支持 FireFox 5.0,我从结果中删除了 NaN 函数。

function CalculateFormula() {
    result = *formula*;
}

我也试过这个,但是在调用 NaN 函数时它也会退出脚本。但这证实了我的公式按预期返回了一个数字。

function CalculateFormula() {
    result = *formula*;
    result = NaN(result);
}

谁能对这个问题有所了解?

4

3 回答 3

6

它在 Firefox 上失败了,因为全局对象的NaN属性在 ECMAScript 5 上被定义为non-writablenon-configurablenon-enumerable,而Firefox 4(及更高版本)正在实现这个版本的规范。

这意味着该属性的值不能通过赋值-non-writable-更改,该属性不能重新配置(不能更改上述三个属性中的任何一个)或被删除-non-configurable-,并且它不会出现在循环for-in或使用Object.keys方法-non-enumerable-

您可以重命名您的函数,或者更好的是,重构您的代码,以便公开较少的全局标识符以避免该问题。

全局对象的值属性 as NaN,Infinityundefined, 在 ECMAScript 3 上是可写的,这导致了很多问题,你不能依赖它的值,ES5 解决了这个问题。

于 2011-08-09T06:37:12.650 回答
3

重命名函数 - NaN现在已成为不可配置的属性 - 所以你只需要给你的函数另一个名字

Error: can't redefine non-configurable property 'NaN'
Source File: formula.html
Line: 2
于 2011-08-09T06:37:21.793 回答
2

尝试NaN使用不同的名称重新定义您的方法,例如checkNaN. 这是一个不可配置的全局属性。

于 2011-08-09T06:35:39.573 回答