你的两种方法仍然存在缺陷。 一个简单的例子是尝试使用 var a = [“one”,”two”,”three”]; a = []; a = new Array(); var a = [“four”,”five”,”six”]; a.join(‘*’); console.log(a); // 现在我们期望输出为 four*five*six。 但是,输出将为 ***four*five*six。这绝不是正确的过程。我正在寻找一个完美的解决方案,它可以在所有浏览器中工作。如果您有这样的解决方案,请告诉我。
难道
myArray = [];
不好吗?
如果你还有其他对该数组的引用,那就不行了。
我敢打赌这个
myArray.length = 0;
在并非所有浏览器中都能正常工作,而上面提供的代码片段则可以。
优秀的代码,myArray.empty() 也能工作。
它不是 Array 构造函数上的标准原型。
至少在最新的 WebKit 浏览器中不是。
并非如此 - 在某些浏览器中不起作用
myArray=[]; 非常棒
哈哈,只需执行
arrayobj.splice(0,arrayobj.length)。
你甚至可以将其添加到原型中,例如
Array.prototype.empty() {this.splice(0,this.length);}
搞定。
我认为
myArray = [];
/* 或 */
myArray = new Array();
会是最好的,因为它跨浏览器兼容。
确保你理解这到底意味着什么。你正在创建一个新的实例,而不是使用同一个数组。如果你没有意识到这一点,在存在对原始数组的引用的情况下,这可能会导致很多有趣的调试工作。
再说一次,如果你有引用,那么它就会丢失…
myArray = [] 和 myArray = new Array() 的问题在于,从技术上讲,你并没有清空数组,而是创建了一个新数组。创建新数组对浏览器来说是一项工作量,因此将数组的长度设置为 0 可能是最好的方法。
以上示例均无效
在上述方法中,我只测试了通过拼接清空数组,它运行得完美无缺。
这是一个 jsPerf 测试用例:http://jsperf.com/emptying-arrays
旧帖子,但这里是我的两分钱
如上 jsPerf 测试用例所示,创建新数组比将长度设置为 0 更快。原因是现在大多数 JS 的内置函数和构造函数倾向于在底层使用原生代码进行优化(这在很大程度上要归功于 Javascript 变得如此流行)。至少在 Chrome 中是这样,但我不能保证其他浏览器也是如此。
简而言之,坚持创建新数组 - 这种旧技巧现在已经不再必要了。
再说一次,你错过了重点。创建新数组会破坏对该数组的所有引用。
附注:拼接是最糟糕的:http://jsperf.com/emptying-arrays/4
你的两种方法仍然存在缺陷。
一个简单的例子是尝试使用
var a = [“one”,”two”,”three”];
a = [];
a = new Array();
var a = [“four”,”five”,”six”];
a.join(‘*’);
console.log(a); // 现在我们期望输出为 four*five*six。
但是,输出将为 ***four*five*six。这绝不是正确的过程。我正在寻找一个完美的解决方案,它可以在所有浏览器中工作。如果您有这样的解决方案,请告诉我。
我知道距离你的帖子已经过去一年多了,但该代码片段在 Internet Explorer 8 和 Firefox 21 中按预期工作。
这个解决方案对我来说最有效
var sounds = new Array(“a”,”b”,”c”);
//返回一个空数组
找了几个小时才找到这个。谢谢你的分享