js的NaN深入了解

发布时间 2023-06-16 10:15:57作者: i5ba
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>javascript</title>
    <style>

    </style>
</head>
<body>


<script>
    // 下面的字符串转换成NaN结果,但是,NaN也是数字类型
    iNumber = parseInt("a12bc")
    document.write(iNumber)
    document.write("--->")
    document.write(typeof iNumber)
    document.write("<br/>")

    //注意NaN与别的整数相加的结果也是NaN
    var temp = iNumber + 2
    document.write(temp)
    document.write("----")
    document.write(typeof temp)
    document.write("<br/>")

    // NaN与字符串的结果是字符串
    temp = iNumber + " haha"
    document.write(temp)
    document.write("---")
    document.write(typeof temp)
    document.write("<br/>")

//    JavaScript中,NaN是一个特殊的数字值(typeof NaN的结果为number),是not a number的缩写,表示不是一个合法的数字
//    一特殊的数字类型的值,但它又不是数字
    document.write(typeof NaN)
    document.write("<br/>")

//    得到一个NaN的几种情况
    iNumber = parseInt("ab23c")
    document.write(iNumber)
    document.write("<br/>")

    iNumber = parseInt("ab23")
    document.write(iNumber)
    document.write("<br/>")

    iNumber = Number("cd2")
    document.write(iNumber)
    document.write("<br/>")

    iNumber = Number(undefined)
    document.write(iNumber)
    document.write("<br/>")

    iNumber = Math.log(-1)
    document.write(iNumber)
    document.write("<br/>")

    iNumber = Math.sqrt(-1)
    document.write(iNumber)
    document.write("<br/>")

    iNumber = Math.acos(2)
    document.write(iNumber)
    document.write("<br/>")

    document.write("----------------------------")
    document.write("<br/>")

//    NaN参与的任何运算都是NaN
    iNumber = NaN + 1
    document.write(iNumber)
    document.write("<br/>")

    iNumber = NaN -1
    document.write(iNumber)
    document.write("<br/>")

    iNumber = NaN * 2
    document.write(iNumber)
    document.write("<br/>")

    iNumber = NaN /2
    document.write(iNumber)
    document.write("<br/>")

    iNumber = 3 / NaN
    document.write(iNumber)
    document.write("<br/>")

//    NaN是在js中唯一一个和自身不相等的值
    if(NaN == NaN){
        document.write("我自己与自己比较是相等的")
        document.write("<br/>")
    }else {
        document.write("我自己与自己比较是不相等的,悲哀!")
        document.write("<br/>")
    }

    // 我们可以使用全局函数isNaN()来判断一个数值是不是一个非数字(并不是用来判断是不是NaN这个值)
//    因为NaN也是数字类型的,主要用来判断目标确定是是一个数值的情况下
    iNumber = isNaN(NaN)
    document.write(iNumber)//true
    document.write("<br/>")

    //false
    iNumber = isNaN(123.1)
    document.write(iNumber)
    document.write("<br/>")

    iNumber = isNaN("123.23")
    document.write(iNumber)//false
    document.write("<br/>")

    // 为什么说isNaN()不是用来判断是不是NaN这个值的呢?因为isNaN对非数字不起作用,它首先做的就是把这些值转换成数字,转换的结果可能为NaN,然后函数会错误地返回true:
    iNumber = isNaN("abc123")
    document.write(iNumber)//true
    document.write("<br/>")

    document.write("---------------------")
    document.write("<br/>")
// 所以我们想确定这个一个值是为NaN,可以使用以下两种方法:
//
// 方法一:将isNaN()和typeof结合来判断
    function  isRealNaN(value){
        return typeof value === "number" && isNaN(value)
    }

    document.write(isRealNaN("abc"))//false
    document.write("<br/>")

    document.write(isRealNaN(23.234))//false
    document.write("<br/>")

    document.write(isRealNaN(NaN))//true
    document.write("<br/>")

    document.write("---------------------")
    document.write("<br/>")

// 方法二:值是否与本身不相等(NaN是唯一有这样特征的值)
    function isValueNaN(value) {
        return value !== value
    }

    document.write(isValueNaN(NaN))//true
    document.write("<br/>")

    document.write(isValueNaN("abc"))//false
    document.write("<br/>")

    document.write(isValueNaN(12.23))//false
    document.write("<br/>")



</script>

</body>
</html>