感受這個題目涉及的基礎知識內容比較多,故分享出來,後面會詳細介紹數據類型的文章,歡迎關注。前端
實現一個函數clone,能夠對JavaScript中的5種主要的數據類型(包括Number、String、Object、Array、Boolean)進行值複製。數組
/** * 對象克隆 * 支持基本數據類型及對象 * 遞歸方法 */ function clone(obj) { var o; switch (typeof obj) { case "undefined": break; case "string": o = obj + ""; break; case "number": o = obj - 0; break; case "boolean": o = obj; break; case "object": // object 分爲兩種狀況 對象(Object)或數組(Array) if (obj === null) { o = null; } else { if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") { o = []; for (var i = 0; i obj.length; i++) { o.push(clone(obj[i])); } } else { o = {}; for (var k in obj) { o[k] = clone(obj[k]); } } } break; default: o = obj; break; } return o; }
若是你有高級前端的水平,這個時候就應該寫出下面的代碼函數
Object.prototype.clone = function(){ var o = this.constructor === Array ? [] : {}; for(var e in this){ o[e] = typeof this[e] === "object" ? this[e].clone() : this[e]; } return o; }
基礎知識還須要牢固,要不怎麼能寫出這樣高端的寫法呢?哈哈?this