为什么IE会出现这个错误:对象不支持属性或方法isNaN

11
我在IE 11中遇到了这个错误:
对象不支持isNaN属性或方法
JavaScript
jQuery(document).ready(function($) {
    var $total = $('#total'),
    $value = $('.value');
    $firstName = $('#firstname');
    $lastName = $('#lastname');
    $tour = $('#tour');
    $pledge = $('#pledge');
    $currency = $('#currency');
    $distance = $('#distance');
    $riders = $('#riders');

    $(':input').on('input change', function(e) {
        var total = 1;
        $value.each(function(index, elem) {
            if(!Number.isNaN(parseFloat(this.value)))
                total = total * parseFloat(this.value);
        });
        $total.val(total/10);

        $('#pledgefirstname').text($firstName.val());
        $('#pledgelastname').text($lastName.val());
        $('#pledgetour').text($tour.val());
        $('#pledgepledge').text($pledge.val());
        $('#pledgecurrency').text($currency.val());
        $('#pledgecurrency2').text($currency.val());
        $('#pledgecurrency3').text($currency.val());
        $('#pledgecurrency4').text($currency.val());
        $('#pledgetotal').text($total.val());
        $('#pledgetotal2').text($total.val());
        $('#pledgedistance').text($distance.val());
        $('#pledgeriders').text($riders.val());
    });
});

6
只需使用独立的isNaN方法,而不是从Number对象中调用它:if (isNaN(...)) - VisioN
1
不要混淆 window.isNaNNumber.isNaN()。我认为后者是 EcmaScript 6 的一个特性。 - Johan
1
好的,谢谢。你具体是什么意思? - square_eyes
请看这里:http://kangax.github.io/es5-compat-table/es6/#Number.isNaN - A. Wolff
1
Number.isNaN是下一个JavaScript规范非常新的、仍处于实验阶段的功能。它在IE中根本不受支持。你可能将其与全局的isNaN函数混淆了,后者在所有浏览器中都有支持。 - ajp15243
显示剩余9条评论
3个回答

13

Number.isNaN

这是一项实验性技术,属于 Harmony(EcmaScript 6)提案的一部分。由于该技术的规范尚未稳定下来,请查看兼容性表格以了解各种浏览器中的使用情况。还要注意,实验性技术的语法和行为可能会因规范变化而在将来的浏览器版本中发生变化。

大多数浏览器(包括 IE11)仍未支持此方法。

您应该使用标准的 isNaN 方法:

if (isNaN( parseFloat(this.value) )) { ... }

2
那似乎是暗示的。 - cookie monster
@square_eyes if (isNaN(variable)) {alert('这不是一个数字')} - K. Weber
@square_eyes:你把 Number.isNaN 改成 isNaN 后就可以得到结果了吗?你的控制台中显示的错误和你在问题中展示的一样吗?如果是这样,那么你可能是大小写问题。isNanisNaN 不同。 - cookie monster
我直接从我的网站复制了代码,没有改变任何大写字母。使用这种解决方案会破坏我的表单上的非数字输入字段。错误是因为打错字了,我会修复它。 - square_eyes
1
好的,问题已经解决了,谢谢@cookiemonster的帮助。我忘记加感叹号了,太傻了。 - square_eyes
显示剩余8条评论

6
如果您在React中使用ES6和Babel,则可以按照以下方式操作:

如果你正在使用ES6和Babel在React中。你可以这样做:

// pollyfills for older browsers
// core-js v2.x.x:
import 'core-js/es6/number'; 
// core-js v3.x.x:
import 'core-js/es/number'; 

在package.json中添加依赖项。
"dependencies": {
    "core-js": "^2.5.5",
  }

3

我曾经遇到过类似的问题,但是这个问题是在React编译、打包和压缩之后出现的。为了解决这个问题,我重新定义了Number.isNaN

if (!Number.isNaN) {
  Object.defineProperty(Number, 'isNaN', {
    value: function(value) {     
      return value !== value;
    }
  });
}

应该是 if (!Number.isNaN) { 而不是 if (!Number.isNan) { - Seven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接