//先来方法的代码
function clone(obj) {
var copy;
switch(typeof obj){
case 'number':
case 'string':
case 'boolean':
copy = obj;
break;
case 'object':
if (obj == null) {
copy = null
} else if (toString.apply(obj) === '[object Array]') {
copy = [];
for (var i in obj) {
copy.push(clone(obj[i]))
};
} else {
copy = {};
for (var j in obj) {
copy[j] = clone(obj[j]);
}
}
}
return copy;
}

number , string , boolean 直接赋值

object , array 遍历后赋值

方法中用到的apply方法

apply方法: 
语法:apply([thisObj[,argArray]]) 
定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
说明: 
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

call方法: 
语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
说明: 
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

  //各种类型的返回值; call 和 apply 返回值相同; 只是参数不同
   console.log("string" +toString.apply(str)) // string[object String]
console.log("number" +toString.apply(num)) // number[object Number]
console.log("object" +toString.apply(obj)) // object[object Object]
console.log("array" + toString.apply(arr)) // array[object Array]
console.log("boolean" + toString.apply(bool)) // boolean[object Boolean]
console.log("undefined" + toString.apply(undefined))   //undefined[object Undefined]
console.log("null" + toString.apply(null))    // null[object Null]

面试题:实现一个方法clone;可以对js五种数据类型进行值复制的更多相关文章

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

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package zuoye; public class print1 { String a="abcdefghigklmnopqrstuvwxyz"; String B=" ...

  3. 用javascript判断一个html元素是否存在的五种方法:

    1. 判断表单元素是否存在(一) if("periodPerMonth" in document.theForm){ return true; }else{ return fals ...

  4. 首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package lianxi; public class Print_1 { int x; Print_1(int x) { this.x = x; } void outPut() { String ...

  5. .编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package com.homework.zw; //类Print部分 public class Print1 { int x; void output() { if(x==1) { for(int ...

  6. 7.编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package com.bao; public class Print1 { int x; void output() { if(x==1) { System.out.println("AB ...

  7. JS实现clone()方法,对五种主要数据类型进行值复制

    Object.Array.Boolean.Number.String 分为三种情况:普通变量,Array,Object 递归调用

  8. Redis的五种数据类型及方法

    字符串string: 字符串类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据货Json对象描 ...

  9. jedis五种数据类型的方法解释

    常用命令 1)连接操作命令 quit:关闭连接(connection) auth:简单密码认证 help cmd: 查看cmd帮助,例如:help quit 2)持久化 save:将数据同步保存到磁盘 ...

随机推荐

  1. 理解Javascript的状态容器Redux

    Redux要解决什么问题? 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状态). 这些 state 可能包括服务器响应.缓存数据. ...

  2. ASP.NET DropDownList FindByValue 未将对象引用设置到对象的实例 解决方法

    1.粗心把DataValueField中的字段名称写错了. 2.把DataBind()写在了FindByValue()后面了,以下代码是正确顺序: BLL.Student bllStu = new B ...

  3. C#中的文件操作2

    1. 读取文件的方法: 1.  声明一个文件流: 目的是为了内存与文件之间的桥梁,可以进行数据的往来. FileStream fs = new FileStream(filename,FileMode ...

  4. 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用

    一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的MVC.MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的 ...

  5. PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例

    问:什么叫WAMP?答:Windows下的Apache+Mysql+PHP,称之为WAMP. 本文案例采用的PHP集成环境是我自己开发的纯绿色版WAMP软件(PHPWAMP). 我在这款集成环境里集成 ...

  6. Redmine管理项目3-调整用户显示格式

    在 Redmine 中新建用户时是这样的: 必须指定姓氏.名字,然后 Redmine 默认是按“名字 姓氏”这种方式显示用户.比如“张三”,会显示成“三张”……看起来好别扭啊. 怎么调整呢,参看 Re ...

  7. python2.x urllib2和urllib的使用

    1.最简单用法 urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,...) import urllib2 import ur ...

  8. Leetcode-34-Search Insert Position-(Medium)

    二分法查找需要插入的位置,需要注意两点 1.如果元素不存在,停止的时候start Index刚好是需要插入的位置 2.如果元素存在,需要向前追溯找到非目标元素的起始边界 #!/usr/local/bi ...

  9. asp.net mvc + mysql + ef6

    1.通过NuGet包管理器安装:EntityFramework6.1.3.MySql.Data.Entity6.9.9 2.添加新建项→ADO.NET实体对象模型(命名MyContext)→空Code ...

  10. C++四种cast操作符

    C 风格(C-style)强制转型如下: (T) expression  或 T(expression) //函数风格(Function-style) 两种形式之间没有本质上的不同. 对于具有转换的简 ...