实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
2017-07-20 21:56
1141 查看
实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
拓展:为什么用Object.prototype.toString.call(obj)检测对象类型?不理解这个函数的可以参考这篇博文。
这里我主要解释 Object.prototype.toString.call(obj).slice(8,-1) === "Array" ?是什么意思。
如果是数组对象,Object.prototype.toString.call([])的检测结果是 "[object Array]", 通过slice方法截取子串。 字符串的slice()方法可以查看js高程P124
当然:也可以使用 obj.constructor == Array ? [] : {} 来判断!!!
1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + ""; 10 break; 11 case "number": o = obj - 0; 12 break; 13 case "boolean": o = obj; 14 break; 15 case "object": // object 分为两种情况 对象(Object)或数组(Array) 16 if (obj === null) { 17 o = null; 18 }else{ 19 if(Object.prototype.toString.call(obj).slice(8,-1) === "Array") { 20 o = []; 21 for (var i = 0; i < obj.length; i++) { 22 o.push(clone(obj[i])); 23 } 24 }else{ 25 o = {}; 26 for (var k in obj) { 27 o[k] = clone(obj[k]); 28 } 29 } 30 } 31 break; 32 default: o = obj; 33 break; 34 } 35 return o; 36 } 37 38 var m1 = clone([1,2,3]); 39 var m2 = clone({1:'1', 'hello': 32}); 40 console.log(m1); //[ 1, 2, 3 ] 41 console.log(m2); //{ '1': '1', hello: 32 }
拓展:为什么用Object.prototype.toString.call(obj)检测对象类型?不理解这个函数的可以参考这篇博文。
这里我主要解释 Object.prototype.toString.call(obj).slice(8,-1) === "Array" ?是什么意思。
Object.prototype.toString.call([]); //"[object Array]" "[object Array]".slice(8,-1); //"Array"
如果是数组对象,Object.prototype.toString.call([])的检测结果是 "[object Array]", 通过slice方法截取子串。 字符串的slice()方法可以查看js高程P124
当然:也可以使用 obj.constructor == Array ? [] : {} 来判断!!!
相关文章推荐
- 面试题---实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
- 实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
- 实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
- 实现JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
- javascript,对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
- 写一个方法clone; 实现js五种数据类型(string, number, boolean, array, object)的复制
- 实现一个函数clone,可以对javascript中的5种主要的数据类型进行值复制。
- 怎样实现一个函数clone,对JavaScript中的五种主要的数据类型进行值复制
- 实现一个clone函数并可以对js中的5种主要数据类型进行值复制
- 【前端js】实现一个函数可以对JavaScript中的5种主要数据类型进行赋值
- JavaScript的数据类型之Number, String, Boolean和Object
- JavaScript的数据类型之Number, String, Boolean和Object
- javascript:第四章数据类型:typeof number,Function,boolean,string,object,
- SharedPreferences的一个工具类适合的数据类型包括String、Integer、Boolean、Float、Long
- 参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数(里面用的不是快速排序)
- 【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)
- javascript对象----Boolean、Math、Number、String 、Array、JSON、Object
- JavaScript 数据类型转换(转为String/Number/Boolean)
- Javascript中类型: undefined, number ,string ,object ,boolean
- JavaScript中如何检测一个变量是一个String类型?请写出函数实现