使用下划线函数初始化变量时,最好对数组使用 .slice(0),对 objects 使用 _(obj).clone 吗?
When initializing a variable with an underscore function, is it best to use .slice(0) for arrays and _(obj).clone for objects?
标题可能有点混乱。
考虑下划线文档中的以下示例:
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
注意:我添加了var oFound = ...
var oFound = _.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
在拒绝示例中使用 .slice(0) 并在查找示例中使用 _(obj).clone() 是否被视为最佳实践?这将确保新初始化的变量不是对下划线函数输入的引用。例如:
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }).slice(0);
var oFound = _(_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"})).clone();
没有。首先,该函数不会在任何地方保留它 returning 给您的值的副本,其次,如果保留了,则由该函数决定它是否适合 return 你直接引用它或它的副本。添加 slice
或 clone
(除非您有特殊原因)只会毫无目的地创建对象。
请记住,数组 reject
return 是 而不是 您输入的数组;这是一个 new 数组,仅包含未被拒绝的条目。 (如果碰巧这些条目中的任何一个是对象引用,那么当然两个数组都引用了相同的对象——如果您也使用了 slice
也会如此。)
另一方面,findWhere
的目的是在列表中找到对象 并且 return 向您提供对该对象的引用.大概您有理由想要访问该对象(也许您想更改它)。除非你有特定的理由这样做,否则不仅没有必要复制它,而且它可能会主动破坏你首先找到它的理由。
标题可能有点混乱。
考虑下划线文档中的以下示例:
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
注意:我添加了var oFound = ...
var oFound = _.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
在拒绝示例中使用 .slice(0) 并在查找示例中使用 _(obj).clone() 是否被视为最佳实践?这将确保新初始化的变量不是对下划线函数输入的引用。例如:
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }).slice(0);
var oFound = _(_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"})).clone();
没有。首先,该函数不会在任何地方保留它 returning 给您的值的副本,其次,如果保留了,则由该函数决定它是否适合 return 你直接引用它或它的副本。添加 slice
或 clone
(除非您有特殊原因)只会毫无目的地创建对象。
请记住,数组 reject
return 是 而不是 您输入的数组;这是一个 new 数组,仅包含未被拒绝的条目。 (如果碰巧这些条目中的任何一个是对象引用,那么当然两个数组都引用了相同的对象——如果您也使用了 slice
也会如此。)
另一方面,findWhere
的目的是在列表中找到对象 并且 return 向您提供对该对象的引用.大概您有理由想要访问该对象(也许您想更改它)。除非你有特定的理由这样做,否则不仅没有必要复制它,而且它可能会主动破坏你首先找到它的理由。