JavaScript-js里 定义数组[]和new array()的疑问

发布于 2016-10-24 13:05:12 字数 74 浏览 1298 评论 4

0 in [1, 2] //true
1 in [1, 2] //true
2 in [1, 2] //false

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

想挽留 2017-10-01 17:30:41

[]是个直接量,是个现成的数组,直接可以使用,而new Array()表示什么意思呢?
var arr = new Array(); 表示自己手动创建一个数组,这是个从无到有的过程,
而js的new它到底是什么作用呢?
arr.constructor == Array.prototype.constructor;
这样变量arr就可以访问Array原型中的任何方法,也就是说arr就变成了所谓的数组,
当然new Array是有代价的,查找原型链是有时间代价的。可以做个这样的测试
//new Array()循环100000次
function test1(arr){
var d1 = new Date();
var a = []
for(var i = 0; i < 100000; i++){
a[i] = new Array();
}
var d2 = new Date();
arr.push(d2.getTime() - d1.getTime())
console.log(d2.getTime() - d1.getTime())
}

//[]循环100000次
function test2(arr){
var d1 = new Date();
var a = []
for(var i = 0; i < 100000; i++){
a[i] = [];
}
var d2 = new Date();
arr.push(d2.getTime() - d1.getTime())
console.log(d2.getTime() - d1.getTime())
}

//new Array方式执行100次,并计算平均值
function excuteTest1(){
var arr = [];
for(var i = 0; i < 100; i++) {
test1(arr);
}
console.log(arr)
console.log("average1:" + average(arr))
}

//[]方式执行100次,并计算平均值
function excuteTest2(){
var arr = [];
for(var i = 0; i < 100; i++) {
test2(arr);
}
console.log(arr)
console.log("average2:" + average(arr))
}
function average(arr) {
var s = 0,len = arr.length;
for(var i = 0; i < len; i++) {
s += arr[i];
}
return s/len;
}

然后我在不同的浏览器做测试:
new Array() []
FF: 19.85ms 6.6ms
Chrome: 19.4ms 4.58ms
IE11: 35.38ms 9.77ms
通过这些数据,显然能看出[]的效率要比new Array()好的多。像其他的new Function,new Object()都是类似的,所以在js中最好使用直接量。

甜柠檬 2017-08-03 17:48:08

js的in运算符判断的是数组的下标,因此2 in [1, 2]返回的是false,因为数组只有下标为0和1。new Array(10)不等于[10],前者是定义了一个占内存空间为10的数组,而后者定义了一个有一个元素的数组。

浮生未歇 2017-07-09 11:33:37

" (变量 in 对象)" 里的变量是指数组的下标,所以2 in [1, 2]就会返回false

而对于数组的定义方式:

var foo = []; 
var bar = new Array();

这两种方式是一样的,没什么区别,一种是通过直接量定义,一种是通过JavaScript的内置对象来定义。但是用哪种方式有时候要看定义什么样的数组

就如你说的 new Array(10) 和 [10] 这肯定是不一样的

前者 new Array(10) 是定义 10 个空间大小的数组,每个数组的值都为undefined
后者是定义[10]1个空间大小的数组,并且这个数组的值为10

清晨说ぺ晚安 2017-05-11 23:44:23

 0 in [1, 2] //0 in arr 表示数组中arr[0]存在
1 in [1, 2] //1 in arr 表示数组中arr[1]存在
2 in [1, 2] //2 in arr 表示数组中arr[2]不存在,所以这里返回false

var foo = [];
var bar = new Array();
//这里foo==bar的

new Array(10) == [10] //?

//这里两者不相等,前者创建一个数组且有10元素为空;而后者是创建一个数组且有一个值为10。而new Array(10,20) == [10,20]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文