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]';  
    }

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/garyzhijiang/p/9100499.html
Copyright © 2011-2022 走看看