实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

 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

时间: 2024-10-04 16:37:32

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制的相关文章

JavaScript变量二(数据类型,Number,String,Object)

Number类型: Number类型是JavaScript中最令人关注也是最复杂的类型了.这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值).为支持各种数值类型,ECMA-262定义了不同的数值字面量格式. 主要分为十进制,八进制,十六进制.除了以十进制表示外,整数还可以通过八进制(以8为基数)或十六进制(以16为基数)的自面值来表示,其中,八进制字面值的第一位必须是(0),然后是八进制数字序列(0-7).如果字面值中的数值超出了范围,那么前面的零将被忽

谭浩强 C程序设计 8.5 写一个函数,使输入的一个字符串按返序存放

写一个函数,使输入的一个字符串按返序存放,在主函数中输入和输出字符串. #include <stdio.h> #include <string.h> int main(){ void reverse(char arr[]); char arr[50]; gets(arr); reverse(arr); for(int i=0; i< strlen(arr); i++){ printf("%3c",arr[i]); } printf("\n&quo

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar

请实现一个函数,把字符串中的每个空格替换成“%20”

请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy." #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char arr[] = "we are happy"; int i = 0; int j = 0; int len

【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”例如输入“we are best ”,则输出we%20are%20 best 此题的实际意义是在网络编程中,如果URL中含有特殊的字符如空格.‘#’等可能导致服务器无法获取正常的参数,我们需要将特殊字符转换成服务器可以识别的字符.准换的规则是“%”加上ASCLL的两位十六制表示,如空格的ASCLL值是32则十六进制为0x20 void replaceBlank(char *src,int length) { int oriLength

面试题5:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. " void ReplaceBlank(char String[],int length) { //originalLength 为字符串string的实际长度 //length字符串的总容量 int originalLength  = 0; int numberOfBlank = 0; int i =