• js 判断数据类型,以及undefined和null的理解


    变量声明和赋值的几种状态

    • 未声明
    • 已声明,未赋值
    • 未声明,却赋值 (不正常,会成为全局变量。严格模式下抛出ReferenceError错误)
    • 已声明,再赋值 (正常)

    数据类型的分类

    • 基本数据类型
      - Boolean
      - Number
      - String
      - Undefined
      - Null
    • 复杂数据类型
      - Object(本质上是由一组无序的名值对组成,引用类型)

    typeof和数据类型

    • "undefined"表示这个值未定义
    • "boolean"表示这个值是布尔值
    • "string"表示这个值是字符串
    • "number"表示这个值是数值
    • "object"表示这个值是对象或者null
    • "function"表示这个值是函数
      小结typeof null 返回 "object",可以认为null是空对象;函数在ECMAScript中是对象,不是一种数据类型,但也是一种特殊存在,可以通过typeof进行区分

    未声明和未赋值状态下的undefined值

    var message;      // 这个变量声明后默认取得 undefined 值
    // 下面这个变量没有声明
    // var age;
    alert(message);      // "undefined"
    alert(age);          // 产生错误
    

    小结: 对于未声明的变量执行alert会报错(因为对于未声明的变量,只能执行typeof检测数据类型这一项操作。当然delete也行,但没有意义,而且严格模式也报错)


    var message;      // 这个变量声明后默认取得 undefined 值
    // 下面这个变量没有声明
    // var age;
    alert(typeof message);      // "undefined"
    alert(typeof age);          // "undefined"
    

    小结: 对于未声明的变量 和 未赋值的变量 执行 typeof 操作都返回undefined值


    判断数据类型的几种方式

    typeof

    • 可以判断的类型: number、boolean、symbol、string、object、undefined、function
    • 优点: 可以区分function和object
    • 缺点:
      - type null 返回 object,可以理解为空对象,但其实我们想要的是Null
      - 数组(Array),日期(Date),正则(RegExp)都会返回object,但其实我们想要更加详细的区分

    instanceof

    • 功能: 用于判断两个对象是否属于实例关系(可以借此判断数据类型)
    • 缺点: 无法判断某一对象具体属于哪种类型
      [] instanceof Array; // 返回true
      [] instanceof Object;// 返回true
    

    constructor

    • 功能: constructor是原型prototype的一个属性,可以通过一个对象的constructor属性比对对象的数据类型
    • 缺点: null 和 undefined 没有constructor
       false.constructor == Boolean;           // true
       "123".constructor == String;            // true
       new Number(123).constructor == Number;  // true
       [].constructor == Array;                // true
       new Function().constructor == Function; // true
       new Date().constructor == Date;         // true
       document.constructor == HTMLDocument;   // true
       window.constructor == Window;           // true
       new Error().constructor == Error;       // true
    

    Object.prototype.toString.call()

    • 功能: toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]]
       Object.prototype.toString.call('123') ;   // [object String]
       Object.prototype.toString.call(123) ;     // [object Number]
       Object.prototype.toString.call(false) ;   // [object Boolean]
    
  • 相关阅读:
    【初心】
    【杂题集】单题小总结
    【模板】(旧)矩阵模板
    【机智题?】【Vijos】【天平称量】
    【杂题集】【51NOD 1267】4个数和为0
    【模板】(旧)Miller Rabin 素数判定
    【杂谈】只是想想
    【杂谈】思考
    【学习?】组合和排序
    【模版】读入优化
  • 原文地址:https://www.cnblogs.com/nangezi/p/14205406.html
Copyright © 2020-2023  润新知