我已经运行javascript很长一段时间了,我在IE或早期版本的firefox中从未遇到过任何问题。但是,在Firefox 5.0中,if会失败。
注意!为了简化示例,已经删除了公式,因为我已经确认该公式正在工作并产生预期的结果。
<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);
}
谁能对这个问题给出一些说明? 它在Firefox上失败是因为全局对象的NaN
属性在ECMAScript 5中定义为不可写, 不可配置和不可枚举,而Firefox 4(及以上)正在实现该规范的这个版本。
这意味着该属性的值不能通过赋值-non-writable-来改变,该属性不能被重新配置(不能改变上述三个属性中的任何一个)或被删除-non-configurable-,它不会出现在for-in
循环或Object.keys
方法-non-enumerable-中。
你可以重命名你的函数,或者更好的是,重构你的代码以便暴露更少的全局标识符来避免这个问题。
全局对象的值属性,如NaN
, Infinity
和undefined
,在ECMAScript 3上是可写的,这导致了很多问题,你不能依赖它的值,ES5解决了这个问题。
重命名函数—NaN现在已经成为一个不可配置的属性——所以你只需要给你的函数另一个名字
Error: can't redefine non-configurable property 'NaN'
Source File: formula.html
Line: 2
尝试用不同的名称重新定义NaN
方法,如checkNaN
。这是一个不可配置的全局属性