zoukankan      html  css  js  c++  java
  • 面试题中常见的数据类型陷阱【1】

    * 首先明确一下js中常见的false值有:0,+0,-0,false,"",undefined,null,NaN.

    我们平时这样说是在强制转换Boolean()或隐式转换情况下,所以正常情况下作比较,情况如下:

    1     console.log(NaN==undefined);   //false
    2     console.log(NaN==false);      //false
    3     console.log(undefined==false);      //false
    4     console.log(null==false);     //false

    此时不存在隐式转换,所以为false。

    但若在数字或字符类型进行比较时,js运行机制会将其隐式转换为Boolean类型:

    1  console.log(false=="");   //true
    2  console.log(false==0) ; //true

    但作为弱类型语言,js有着很多不符合常理的情况,我们称之为怪异行为:

    
    
          console.log("0"==false);    //true
    console.log(Boolean("0")); //true
    1     Boolean([]);      //true
    2     console.log([]==false); //true
    3     console.log(null==undefined);   //true

    最后再说NaN,W3C的API中这样说NaN:

    NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

    可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值。

    console.log(typeof NaN);    //number

    意思就是NaN就是一个量,他不是数字,但和数字同属于number类型。既然是一个非数字的量,那么它就不能比较:

        console.log(NaN==NaN);  //false
        console.log(NaN===NaN);  //false
        console.log(NaN==false);  //false
        console.log(NaN=="ABC");   //false
  • 相关阅读:
    编程 判断 是否满足条件 的 验证代码。
    Javascript作用域详解。
    DateTable To Json
    反射_获取字段的Description信息
    C# Json格式
    jQuery选择器
    SQL日期格式转换
    【转载】#pragma once与#ifndef
    C++中的左值与右值
    HTML、CSS基础知识
  • 原文地址:https://www.cnblogs.com/pomelott/p/6536279.html
Copyright © 2011-2022 走看看