怪异的JavaScript行为FireFox 5.0

时间:2011-08-09 06:32:36

标签: javascript firefox-5

我有一个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);
}

任何能够解释这个问题的人都会对此有所了解吗?

3 个答案:

答案 0 :(得分:6)

它在Firefox上失败,因为全局对象的NaN property在ECMAScript 5上定义为不可写不可配置非-enumerable Firefox 4 (and up)正在实现此版本的规范。

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

您可以重命名您的功能或更好,重新构建代码,以便公开较少的全局标识符以避免此问题。

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

答案 1 :(得分:3)

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

Error: can't redefine non-configurable property 'NaN'
Source File: formula.html
Line: 2

答案 2 :(得分:2)

尝试使用其他名称重新定义NaN方法,例如checkNaN。这是一个不可配置的全球财产。