数组合并
concat方法
1234var a=[1,2,3],b=[4,5,6];var c=a.concat(b);console.log(c);// 1,2,3,4,5,6console.log(a);// 1,2,3 不改变本身循环遍历
12345678var arr1=['a','b'];var arr2=['c','d','e'];for(var i=0;i<arr2.length;i++){arr1.push(arr2[i])}console.log(arr1);//['a','b','c','d','e']apply
123456var arr1=['a','b'];var arr2=['c','d','e'];Array.prototype.push.apply(arr1,arr2);//或者arr1.push.apply(arr1,arr2);<br>console.log(arr1) //['a','b','c','d','e']
对象的合并
$.extend()
123456var obj1= {'a': 1};var obj2= {'b': 1};var c = $.extend(obj1, obj2);console.log(obj1); // {a: 1, b: 1} obj1已被修改//或者 <br>var obj3 = $.extend({}, obj1, obj2) <br>console.log(obj3); //{a: 1, b: 1} 不会改变obj1,obj2遍历赋值
123456789var obj1={'a':1};var obj2={'b':2,'c':3};for(var key in obj2){if(obj2.hasOwnProperty(key)===true){ <br> //此处hasOwnProperty是判断自有属性,使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰obj1[key]=obj2[key];}}console.log(obj1);//{'a':1,'b':2,'c':3};Obj.assign()
Object.assign(target, …sources)
assign后来的源的属性会覆盖早先的源的属性
assign不是深拷贝,如果源对象的属性是一个指向对象的引用,他会只拷贝那个引用值(如下)12345678910111213141516171819202122let obj1 = { a: 0 , b: { c: 0}};let obj2 = Object.assign({}, obj1);console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}obj1.a = 1;console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}obj2.a = 2;console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}obj2.b.c = 3;console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}// Deep Cloneobj1 = { a: 0 , b: { c: 0}};let obj3 = JSON.parse(JSON.stringify(obj1));obj1.a = 4;obj1.b.c = 4;console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
另外assign会覆盖原对象
深拷贝
|
|
对象类型的判断
typeof
形如 var x = “xx”; typeof x == ‘string’ typeof(x);
返回类型有:’undefined’ “string” ‘number’ ‘boolean’ ‘function’ ‘object’
缺点:对于object类型不能细分是什么类型
优点:对空null的判断 ‘undefined’的应用instanceof
形如 var d = new String(‘test’); d instanceof String ==true;
返回的类型有:String Number Boolean Function Object Array Date
优点:能区分出更细的类型如 Date Array 如 var num = 3; num instanceof Number 能返回具体的类型
缺点:直变量不能区分 必须采用new 的对象constructor
形如:var x = []; x.constructor==Array;
优点:可以返回继承的类型
缺点: 不能对象的细分,如继承 必须手动修正Object.prototype.toString.call();
优点:通用,返回”[objectString]” 具体object的类型
缺点:不能返回继承的类型
一般先typeof如果返回object再constructor