javascript - 为什么Underscore的clone函数要使用数组切片?

标签 javascript underscore.js clone slice

下划线中有几行

  _.clone = function(obj) {
    if (!_.isObject(obj)) return obj;
    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
  };

我不知道为什么这里使用 obj.slice() 来返回 obj(array)。

如果_.isArray(obj)为true,则返回结果为obj.slice()。

问题

据我所知,不带参数的array.slice什么也不做。我认为它应该只是 obj 而不是 obj.slice()

在这一行中使用obj.slice()有什么原因吗?

最佳答案

此函数应该克隆某些内容,从而创建一个新数组。如果返回 obj,则根本没有克隆。来自 doc , array.slice():

returns a new array containing the extracted elements.

调用 slice() 是制作数组副本的简单方法。但请注意,此方法仅执行浅复制(与深复制相比):对于嵌套数组(或对象数组),项目将保留相同的地址。这是一个简单的例子:

var o1 = {"name": "henry"};
var o2 = {"name": "jean"};

var a1 = [o1, o2];
var a2 = a1.slice();

a2[0].name = "modified";

console.log(a1[0].name); // --> "modified"
console.log(a1[0] === a2[0], a1[0] === o1); // --> true

关于javascript - 为什么Underscore的clone函数要使用数组切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41182613/

相关文章:

javascript - 如何在 d3 js javascript 中制作维恩图的数据结构

java - 从 Scala 调用名为 "clone"的 Java 方法

javascript - Raphael 中的动画路径坐标变化

javascript - 从 Javascript 中的对象列表中提取对象属性

javascript - 使用 jQuery 更新滚动条上的多个背景位置?

javascript - 如何制作 `where not` 大小写?

linux - 使用 & 将存储库克隆为后台进程

clone - NFC 标签上的系列 - 真正独一无二?可克隆?

javascript - 如何在 DOM 上的 javascript 操作后立即获取 html 元素的高度

javascript - 如何对齐工具栏上的按钮?