怎么判断变量类型

JavaScript的变量类型:usonb

  • ES5中 undefined string obiect null number boolean
  • ES6新增Symbol
  • 谷歌67版本中还出现了bigInt(但是多数人不把这个当作一个类型)

注意:NaN是Number中的特殊数值,不是Number类型

  • JS的引用类型有哪些?
    Object(Object包含了Data,function,Array,Null等)

  • JS中的typeof输出分别是什么?
    基本类型输出对应类型
    Null–>Object
    NaN–>Number
    {},[]—>object

  • isNaN():用来判断是否是非数值类型
    基本上除了自身NaN返回true,其他都flase。以下2种特殊

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    isNaN(1) //false
    isNaN('1') //false 将’1‘进行了转换
    isNaN('1,2') //true
    Number.isNaN('1,2') //false

    Number('as') //NaN
    Number('as') == NaN //false
    isNaN(Number('as')) //true
    Number.isNaN(Number('as')) //true

    //对于分母为0数据
    123/0 //Infinity
    typeof 123/0 //NaN
    123/0 == NaN //false
    isNaN(123/0) //false
  • 判断是否是数字?
    typeof(n) == “number” && n != Infinity && !isNaN(n)

  • 如何判断数据类型?
    1.typeof
    2.toString()

    null,undefined 不支持

    3.判断数组

    instanceof,constructor,Array.isArray()
    1 instanceof Number //false String一样返回flase
    "1".constructor == String //true
  • 对象可以比较吗?
    可以,Object.is(value1,value2)

  • 数据类型的检测方法:

    1. typeof

      基本类型都可以判断,引用类型(Array,Object,null)->object 无法区分

    2. instanceof

      只能判断引用类型

    3. constructor

      无法判断undefined和null 会报错

    4. Object.prototype.toString.call 最推荐

      可以判断所有数据类型。

      对于Object对象,直接toString()就能返回’[object Object]’

      同样是检测对象 obj 调用 toString 方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什

      么?

      这是因为 toString 是 Object 的原型方法,而 Array、function 等类型作为 Object 的实例,都重写了 toString 方法。

      不同的对象类型调用 toString 方法时,根据原型链的知识,调用的是对应的重写之后的 toString 方法(function 类型返回内容为函数体的字符串,Array类型返回元素组成的字符串…),而不会去调用 Object 上原型toString 方法(返回对象的具体类型),

      所以采用 obj.toString()不能得到其对象类型,只能将 obj 转换为字符串类型;

      因此,在想要得到对象的具体类型时,应该调用 Object 原型上的 toString 方法。即Object.prototype.toString.call