实现一个clone函数,对javascript中的5种数据类型进行值复制

 1 <!doctype html>
 2 <html lang="en">
 3  <head>
 4   <meta charset="UTF-8">
 5   <title>Clone</title>
 6  </head>
 7  <body>
 8     <script>
 9         function clone(arr){
10                  var copy;
11                  switch( typeof obj){
12             case "undefined":
13             break;
14             case "number":
15             copy=obj-0;
16             break;
17             case "string":
18             copy=obj+"";
19             break;
20             case "boolean":
21             copy=obj;
22             break;
23             case "object":
24             if(obj==null){
25                  copy=null;
26             }else{                                
27   if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){
28                 copy=[];
29                 for(var i=0;i<obj.length;i++){
30                   copy.push(clone(obj[i]));
31                }
32             }else{
33                 copy={};
34                for(var j in obj){
35                 copy[j]=clone(obj[j]);
36                }
37             }
38             }
39             default:
40                 copy=obj;
41             break;
42                 }
43         return copy;
44             }    
45     </script>
46  </body>
47 </html>
48     
View Code

整体思路:数组作为参数传递给clone函数。判断数组的数据类型,根据不同的数据类型做不同操作。

     其中只有object对象类型,需要分多种情况,因为typeof null 返回的数据类型也是“object”,所以进行单独的操作。
     另外由于typeof返回的只是基本数据类型。所以需要进一步对数组和对象的类型进行判定。如下:

 1 if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){
 2                             copy=[];
 3                             for(var i=0;i<obj.length;i++){
 4                                 copy.push(clone(obj[i]));
 5                             }
 6                         }else{
 7                             copy={};
 8                             for(var j in obj){
 9                                 copy[j]=clone(obj[j]);
10                             }
原文地址:https://www.cnblogs.com/rookiehao/p/8349811.html