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

时间:2023-03-09 09:11:09
实现一个clone函数,对javascript中的5种数据类型进行值复制
 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Clone</title>
</head>
<body>
<script>
function clone(arr){
var copy;
switch( typeof obj){
case "undefined":
break;
case "number":
copy=obj-0;
break;
case "string":
copy=obj+"";
break;
case "boolean":
copy=obj;
break;
case "object":
if(obj==null){
copy=null;
}else{
if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){
copy=[];
for(var i=0;i<obj.length;i++){
copy.push(clone(obj[i]));
}
}else{
copy={};
for(var j in obj){
copy[j]=clone(obj[j]);
}
}
}
default:
copy=obj;
break;
}
return copy;
}
</script>
</body>
</html>

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

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

 if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){
copy=[];
for(var i=0;i<obj.length;i++){
copy.push(clone(obj[i]));
}
}else{
copy={};
for(var j in obj){
copy[j]=clone(obj[j]);
}