【问题标题】:Weird javascript behaviour FireFox 5.0奇怪的 javascript 行为 FireFox 5.0
【发布时间】:2011-08-09 06:32:36
【问题描述】:

我的 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);
}

谁能解释一下这个问题?

【问题讨论】:

    标签: javascript firefox-5


    【解决方案1】:

    它在 Firefox 上失败了,因为全局对象的 NaN property 在 ECMAScript 5 上被定义为 不可写不可配置不可枚举Firefox 4 (and up) 正在实施这个版本的规范。

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

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

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

    【讨论】:

      【解决方案2】:

      重命名函数 - NaN 现在已成为不可配置的属性 - 因此您只需为函数重新命名

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

      【讨论】:

      • 它不是保留字,它只是全局对象的一个​​不可写(不可配置和不可枚举)属性。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 2011-01-09
        相关资源
        最近更新 更多