怪异的JavaScript行为FireFox 5.0

Kma*_*man 1 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>
Run Code Online (Sandbox Code Playgroud)

当要调用NaN函数时,javascript就会退出.它就像IE中的魅力一样,但为了支持FireFox 5.0,我从结果中删除了NaN功能.

function CalculateFormula() {
    result = *formula*;
}
Run Code Online (Sandbox Code Playgroud)

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

function CalculateFormula() {
    result = *formula*;
    result = NaN(result);
}
Run Code Online (Sandbox Code Playgroud)

谁可以解释这个问题呢?

CMS*_*CMS 6

它在Firefox上失败,因为全局对象的NaN属性在ECMAScript 5上定义为不可写,不可配置不可枚举,Firefox 4(及更高版本)正在实现此版本的规范.

这意味着该属性的值不能通过赋值 - 不可写 -来更改,该属性不能重新配置(不能更改任何三个提到的属性)或被删除 - 不可配置 - 并且它不会出现在一个for-in环或与Object.keys方法-壬enumerable-.

您可以重命名您的功能,或者更好地重构代码,以便暴露较少的全局标识符以避免问题.

全局对象的值属性为NaN,Infinity并且undefined在ECMAScript 3上可写,这导致了很多问题,你不能依赖它的值,ES5修复了这个问题.