2011-08-09 52 views
1

我已经有一段时间的JavaScript运行,我从来没有遇到任何问题,在IE浏览器或早期版本的Firefox。但是在Firefox 5.0中,如果失败。奇怪的JavaScript行为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); 
} 

任何人都可以解释这个问题?

回答

6

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

这意味着该属性的值不能与分配- 壬可写 - 可,属性不能被重新配置(不能改变任何的三个提到的属性)被改变或正在删除- 壬指定型,它不会出现在for-in循环或Object.keys方法-non-enumerable-

您可以重命名功能或更好,但重构代码,以揭露少全局标识符来避免此问题。

全局对象为NaNInfinityundefined价值性,可写ECMAScript的3,这造成了很多的问题,你不能依靠自己的价值观,ES5解决了这个问题。

+0

谢谢大家:) – Kman

2

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

+0

@Ray:固定的,谢谢 –

3

重命名功能— NaN现在已经成为一个非可配置的属性 - 所以你只需要给你的函数的另一个名称

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

它不是” t是保留字,它只是全局对象的*不可写*(不可配置和不可枚举)*属性。 – CMS

+0

好的。更新.... – mplungjan