zoukankan      html  css  js  c++  java
  • JavaScript数据的值复制

    ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。

    基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。

    JavaScript中基本数据类型的赋值和函数传参是值传递,而引用数据类型的赋值和函数传参是引用传递。

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

    function clone(obj) {
    let 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": // object分为三种情况 (null),对象(Object)和数组(Array)
    if (obj === null) {// null类型被看做空对象指针,即空的对象引用。只有一个值,即null值,
                            所以,在用typeof 操作符去检测null类型的值时,结果是object类型。
    copy = null;
    } else {
                    // 通过对象的原型判断传入参数是否为数组
    if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
    // String.slice(start,end) start参数为截取开始位置,end参数为结束位置
    copy = [];
    for (var i = 0; i < obj.length; i++) {
    copy.push(clone(obj[i]));
    }
    } else if(Object.prototype.toString.call(obj).slice(8,-1)==="Object"){
    // 如果对象的原型是Object进行对象遍历
    copy = {};
    for (var j in obj) {
    copy[j] = clone(obj[j]);
    }
    } else {
    // [object Date],[object RegExp],[object Function] 不做处理
    copy = Object.prototype.toString.call(obj);
    }
    }
    break;
    default:
    copy = obj;
    break;
    }
    return copy;
    }


    数组对象的深拷贝:

    var clone = function(v) {
      var o = v.constructor === Array ? [] : {};
      for (var i in v) {
        o[i] = typeof v[i] === "Object" ? clone(v[i]) : v[i];
      }
      return o;
    }

  • 相关阅读:
    iOS:抽屉侧滑动画两种形式(1、UIView侧滑 2、ViewController侧滑)
    深入浅出 React Native:使用 JavaScript 构建原生应用
    JQuery:通过noConflict()方法同时使用jQuery 和其他框架
    JQuery AJAX: 了解jQuery AJAX
    iOS:iOS开发非常全的三方库、插件等等
    JavaScript:实现瀑布流
    iOS:crash崩溃日志分析
    敏捷开发一千零一夜
    江恩交易战法
    苹果:贩卖高科技的美学体验
  • 原文地址:https://www.cnblogs.com/yuzhilai/p/9278259.html
Copyright © 2011-2022 走看看