zoukankan      html  css  js  c++  java
  • 通过typeof和Object.prototype.toString来判断js中的数据类型

    在 JavaScript 里使用 typeof 来判断数据类型,

    1.通过typeof来判断基本数据类型,统一返回即 “number”,”string”,”undefined”,”boolean” 中的其中之一

    typeof 123   //"number"

    typeof "aa"   //"string"

    typeof "ww" //"undefined"

    typeof true //"boolean"

    2.对于是函数的,返回"function"

    typeof function(){}   //"function"

    3.对于数组、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

    typeof {}  //"object"

    typeof []  //"object"

    typeof null //"object"

    4.要想区别对象、数组单纯使用 typeof 是不行的,JavaScript中,通过Object.prototype.toString方法,判断某个对象值属于哪种内置类型。

    例子:

    var arr = [];
    console.log(Object.prototype.toString.call(arr)) 

    结果:

     "[object Array]"

    在ES3中,Object.prototype.toString方法的规范如下:
     
    15.2.4.2 Object.prototype.toString() 
    在toString方法被调用时,会执行下面的操作步骤:
     
    1. 获取this对象的[[Class]]属性的值。
     
    2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串。
     
    3. 返回第二步的操作结果Result(2)。

    [[Class]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的:
    内部属性 描述
    [[Class]] 一个字符串值,表明了该对象的类型。

    其过程简单说来就是:1、获取对象的类名(对象类型)。2、然后将[object、获取的类名、]组合并返回。

    由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:
    console.log(Object.prototype.toString.call(123)) //[object Number]
    console.log(Object.prototype.toString.call('123')) //[object String]
    console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
    console.log(Object.prototype.toString.call(true)) //[object Boolean]
    console.log(Object.prototype.toString.call({})) //[object Object]
    console.log(Object.prototype.toString.call([])) //[object Array]
    console.log(Object.prototype.toString.call(function(){})) //[object Function]

    判断是否为函数

    function isFunction(it) {
            return Object.prototype.toString.call(it) === '[object Function]';
        }

    判断是否为数组:

    function isArray(o) { 
      return Object.prototype.toString.call(o) === '[object Array]';  
    }

  • 相关阅读:
    第二周学习总结
    第一周学习进度总结
    淘宝网质量属性分析
    软件架构师如何工作
    寒假学习记录第十六天
    寒假学习记录第十五天
    寒假学习记录第十四天
    寒假学习记录第十三天
    三.NFS存储服务
    二.Rsync备份服务
  • 原文地址:https://www.cnblogs.com/garyzhijiang/p/9100499.html
Copyright © 2011-2022 走看看