JavaScript-js里 定义数组[]和new array()的疑问
0 in [1, 2] //true
1 in [1, 2] //true
2 in [1, 2] //false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
0 in [1, 2] //true
1 in [1, 2] //true
2 in [1, 2] //false
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
[]是个直接量,是个现成的数组,直接可以使用,而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中最好使用直接量。
js的in运算符判断的是数组的下标,因此2 in [1, 2]返回的是false,因为数组只有下标为0和1。new Array(10)不等于[10],前者是定义了一个占内存空间为10的数组,而后者定义了一个有一个元素的数组。
" (变量 in 对象)" 里的变量是指数组的下标,所以2 in [1, 2]就会返回false
而对于数组的定义方式:
这两种方式是一样的,没什么区别,一种是通过直接量定义,一种是通过JavaScript的内置对象来定义。但是用哪种方式有时候要看定义什么样的数组
就如你说的 new Array(10) 和 [10] 这肯定是不一样的
前者 new Array(10) 是定义 10 个空间大小的数组,每个数组的值都为undefined
后者是定义[10]1个空间大小的数组,并且这个数组的值为10
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]