zoukankan      html  css  js  c++  java
  • javascript 准确的判断类型方法

    JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。

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

    要想区别对象、数组、函数单纯使用 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]

    console.log(Object.prototype.toString.call(this));//[object Window]


    判断是否为函数

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

    判断是否为数组:

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


  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/webph/p/5558910.html
Copyright © 2011-2022 走看看