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

时间:2014-03-20 15:56:28

标签: javascript jquery

我在IE 11中遇到此错误:

  

Object doesn't support property or method 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());
    });
});

3 个答案:

答案 0 :(得分:9)

  

Number.isNaN

     

这是一项实验技术,是和谐的一部分(EcmaScript 6)   提案。因为这项技术的规格还没有稳定,   检查compatibility table是否在各种浏览器中使用。另请注意   实验技术的语法和行为是主题   随着规范的变化,在未来版本的浏览器中进行更改。

大多数浏览器(包括IE11)仍然不支持它。

您应该使用标准isNaN方法:

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

答案 1 :(得分:5)

如果您在React中将ES6与Babel一起使用。您可以这样:

// 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",
  }

答案 2 :(得分:0)

我有一个类似的问题,除了它来自React之后,它是经过编译,打包和缩小的。为了解决这个问题,我重新定义了Number.isNaN

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