zoukankan      html  css  js  c++  java
  • js 判断确切判断Array和Object

     js的数组其实是特殊的对象。

    这就导致:

      typeof [1,2,3] === 'object'

      [1,2,3] instanceof Object  和 [1,2,3] instanceof Array 都是true

    但是注意 [1,2,3]  !=  {'0':1,'1':2,'2':3}, [1,2,3] != [1,2,3] 。因为对象之间的 == 与 ===是一样的。

    那么要确切判断的话,经过我试验,可以使用以下规则:

     [].__proto__ === Array.prototype

    {}.__proto__ === Object.prototype

    附带2个对象深拷贝方法。工程里的copy1和我写的copy2.当然copy2 在规模大点的时候,效率比copy1要高。

    function copy1(obj){
         var o;
        if (obj == null || obj == undefined || typeof obj != 'object'){
            o = obj;
        }
        else{
            var s = JSON.stringify(obj);
            o = JSON.parse(s);
        }
        return o;
    }
    function copy2(obj){
        var re;
        if(obj.__proto__ === Object.prototype ){
            re = {};
            for(var key in obj){
                re[key] = copy2(obj[key]);
            }
        }else if(obj.__proto__ === Array.prototype){
            re = Array(obj.length);
            for(var i = 0;i < re.length;i++){
                re[i] = obj[i];
            }
        
        }else{
            re = obj;
        }
        return re;
    }
  • 相关阅读:
    网络协议
    面向对象三大特性之多态
    面向对象三大特性之封装
    面向对象三大特性之继承
    python面向对象编程
    常用模块之configpaser与shutil
    XML模块
    Python模块之OS,subprocess
    Python日志(logging)模块,shelve,sys模块
    Linux 配置 Nginx
  • 原文地址:https://www.cnblogs.com/pixs-union/p/7373228.html
Copyright © 2011-2022 走看看