对象类型值复制及JS中Object.prototype.toString方法的原理

JavaScript中Object.prototype.toString()

通过Object.prototype.toString方法判断某个对象值属于哪种内置类型.

var arr = [];
console.log(Object.prototype.toString.call(arr)) //"[object Array]"

 

实现了函数clone,对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

 /**
     * 克隆值(Number、String、Object、Array、Boolean)
     * 递归调用
     */
    function clone(obj) {
        var a;
        switch (typeof obj) {
            case "undefined":
                break;
            case "number":
                a = obj - 0;
                break;
            case "boolean":
                a = obj;
                break;
            case "string":
                a = obj + '';
                break;
            case "object":
                if(obj === null) {
                    a = null;
                } else {
                    if(Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
                        a = [];
                        for(var i=0; i<obj.length; i++) {
                            a.push(clone(obj[i]));
                        }
                    } else {
                        a = {};
                        for (var i=0; i<obj.length; i++) {
                            a[i] = clone(obj[i]);
                        }
                    }
                }
                break;
            default:
                a = obj;
                break;
        }
        return a;
    }

 

posted @ 2017-06-15 11:21  糊涂一点web  阅读(185)  评论(0)    收藏  举报