js的数组和对象的多种"复制"和"清空", 以及辨别JS数组和对象的要领

js的数组和对象的多种”复制”和”清空”, 以及辨别JS数组和对象的要领

一.数组清空与复制要领

1.数组清空的要领

var a = [1,2,3];    
a.length = 0;           //要领1 
a.splice(0, a.length);  //要领2

2.数组复制要领

var a = [1,2,3];
a.slice(0)

二.对象清空与复制要领

1.推断对象是不是为空

Object.key.length==0  //为空  ES6

2.对象复制

(1).全能方法

function clone(obj){
    let temp = null;
    if(obj instanceof Array){
        temp = obj.concat();
    }else if(obj instanceof Function){
        //函数是同享的是无所谓的,js也没有什么方法能够在定义后再修正函数内容
        temp = obj;
    }else{
        temp = new Object();
        for(let item in obj){
            let val = obj[item];
            temp[item] = typeof val == 'object'?clone(val):val; //这里也没有推断是不是为函数,由于关于函数,我们将它和平常值一样处置惩罚
        }
    }
    return temp;
}

(2).JSON对象序列化要领, 弊病: 不能复制函数

JSON.parse(JSON.stringify(obj))

三.推断是不是为数组和对象的要领

1.toString要领

Object.prototype.toString.call(array) === '[object Array]'  //true
Object.prototype.toString.call(obj) === '[Object Object]'  //true

数值:返回[object Number]。 
字符串:返回[object String]。 
布尔值:返回[object Boolean]。
undefined:返回[object Undefined]。 
null:返回[object Null]。 
数组:返回[object Array]。 
arguments 对象:返回[object Arguments]。 
函数:返回[object Function]。
Error 对象:返回[object Error]。 
Date 对象:返回[object Date]。 
RegExp 对象:返回[object RegExp]。 
其他对象:返回[object Object]。

2.constructor要领

obj.constructor === Array//true
obj.constructor === Object //true

3.instanceof要领, 弊病: 辨别不开对象或许数组

obj instaceof Object  //true
array instaceof Object// true

4.isArray要领

Array.isArray([1,2,3])  //true

以上是我以为无懈可击的要领, 其他另有许多, 须要请留言
想相识原生js的”数组”和”对象”的要领, 请点击 JavaScript教程-阮一峰

    原文作者:sweetfang
    原文地址: https://segmentfault.com/a/1190000018281671
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞