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

    } 

  • 相关阅读:
    题解 P1587 【[NOI2016]循环之美】
    PKUSC2019颓废记
    使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
    rt.jar包添加源文件只需要关联到已安装对应jdk目录下source.zip源码文件即可
    Kali Linux安装中文输入法
    性能测试(一)——理发店模型
    瑜伽,不仅仅是瑜伽,敬艾扬格大师
    为什么想做测试,我的测试开端
    责任链模式-Chain of responsibility
    后缀数组-基础
  • 原文地址:https://www.cnblogs.com/sniper007/p/2227128.html
Copyright © 2020-2023  润新知