zoukankan      html  css  js  c++  java
  • Object.prototype.toString.call()

      首先看一段ECMA中对Object.prototype.toString的解释:
    Object.prototype.toString( )
    When the toString method is called, the following steps are taken:
    1. Get the [[Class]] property of this object.
    2. Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.

    3. Return Result (2)

    我们知道,Javascript中,一切皆为对象。所以如下代码,应当会输出对应字符: 
    var oP = Object.prototype,
    toString = oP.toString;

    console.log(toString.call([123]));//[object Array]
    console.log(toString.call('123'));//[object String]
    console.log(toString.call({a: '123'}));//[object Object]
    console.log(toString.call(/123/));//[object RegExp]
    console.log(toString.call(123));//[object Number]
    console.log(toString.call(undefined));//[object Undefined]
    console.log(toString.call(null));//[object Null]

    //....

     标准浏览器中完美的作到,但是(为什么要说但是呢)IE6中,却会出现以下问题:

    通过Object.prototype.toString.call获取的 字符串,undefined,null均为Object 

    所以,我们又要悲剧的先对以上类型进行判断,完整代码: 
    var oP = Object.prototype,
    toString = oP.toString;

    function typeOf(value) {
        if (null === value) {
            return 'null';
        }

        var type = typeof value;
        if ('undefined' === type || 'string' === type) {
            return type;
        }

        var typeString = toString.call(value);
        switch (typeString) {
        case '[object Array]':
            return 'array';
        case '[object Date]':
            return 'date';
        case '[object Boolean]':
            return 'boolean';
        case '[object Number]':
            return 'number';
        case '[object Function]':
            return 'function';
        case '[object RegExp]':
            return 'regexp';
        case '[object Object]':
            if (undefined !== value.nodeType) {
                if (3 == value.nodeType) {
                    return (/\S/).test(value.nodeValue) ? 'textnode': 'whitespace';
                } else {
                    return 'element';
                }
            } else {
                return 'object';
            }
        default:
            return 'unknow';
        }

    } 

  • 相关阅读:
    海康威视DS-A80648S管理系统配置
    海康威视iVMS-8700平台录像计划——配置CVR存储
    架构师成长之路5.7-Saltstack数据系统
    架构师成长之路5.6-Saltstack配置管理(jinja模板)
    架构师成长之路5.5-Saltstack配置管理(状态间关系)
    架构师成长之路5.4-Saltstack配置管理(LAMP架构案例)
    架构师成长之路5.3-Saltstack配置管理(State状态模块)
    架构师成长之路5.2-Saltstack远程执行
    架构师成长之路5.1-Saltstack安装及入门
    16 Zabbix4.4.1系统告警“Zabbix agent is not available (for 3m)“
  • 原文地址:https://www.cnblogs.com/sniper007/p/2227128.html
Copyright © 2011-2022 走看看