mozilla
您的搜索结果

    isNaN()

    这篇翻译不完整。请帮忙从英语翻译这篇文章

    概述

    isNaN() 函数用来判断一个值是否为 NaN。注:isNaN函数包含一些非常有意思的强制转换规则;你也可以通过 ECMAScript 6 中定义的 Number.isNaN() 或者 typeof 来判断一个值是否为非数值。

    语法

    isNaN(testValue)

    参数

    testValue
    要被检测是否为 NaN 的值。

    描述

    isNaN 函数的必要性

    与 JavaScript 中其他的值不同,NaN不能通过相等操作符(== 和 ===)来判断 ,因为 NaN == NaNNaN === NaN 都会返回 false。 因此,isNaN 就很有必要了。

    NaN值的产生

    当算术运算返回一个未定义的或无法表示的值时,NaN就产生了。但是,NaN并不一定用于表示某些值超出表示范围的情况。将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN

    例如,0 除以0会返回NaN —— 但是其他数除以0则不会返回NaN

    令人费解的怪异行为

    从最早版本的isNaN函数规范开始, 其针对非数值参数所表现的行为就一直令人费解。 如果isNaN函数的参数不是Number类型, isNaN()会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非NaN数值来说( 值得一提的是,空字符串和布尔值会被强制转换为数值0或1),返回false值也许会让人感觉莫名其妙。比如说,空字符串就明显”不是数值“(not a number)。这种怪异行为起源于:“不是数值”(not a number)在基于IEEE-794数值的浮点计算体制中代表了一种特定的含义。isNaN函数其实等同于回答了这样一个问题:这个值被强制转换成数值时会不会返回IEEE-754​中所谓的”不是数值“(not a number)。

    下一个版本的ECMAScript (ES6)包含Number.isNaN()函数。通过Number.isNaN(x)来检测变量x是否是一个非数值将会是一种可靠的做法。然而,在缺少Number.isNaN函数的情况下, 通过表达式(x != x) 来检测变量x是否是NaN会更加可靠。

    示例

    isNaN(NaN);       // true
    isNaN(undefined); // true
    isNaN({});        // true
    
    isNaN(true);      // false
    isNaN(null);      // false
    isNaN(37);        // false
    
    // strings
    isNaN("37");      // false: 可以被转换成数值37
    isNaN("37.37");   // false: 可以被转换成数值37.37
    isNaN("");        // false: 空字符串被转换成0
    isNaN(" ");       // false: 包含空格的字符串被转换成0
    
    // dates
    isNaN(new Date());                // false
    isNaN(new Date().toString());     // true
    
    isNaN("blabla")   // true: "blabla"不能转换成数值
    

    规范

    规范版本 规范状态 注解
    ECMAScript 1st Edition. Standard Initial definition.
    ECMAScript 5.1 (ECMA-262)
    isNaN
    Standard  
    ECMAScript 6 (ECMA-262)
    isNaN
    Draft  

    浏览器兼容性

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

    相关链接

    文档标签和贡献者

    标签: 
    此页面的贡献者有: yufeng, SphinxKnight, AlexChao
    最后编辑者: yufeng,
    隐藏侧边栏