在Javascript中声明数组时应遵循哪些最佳实践?
当我需要声明一个新数组时,我使用这个符号在Javascript中声明数组时应遵循哪些最佳实践?,javascript,Javascript,当我需要声明一个新数组时,我使用这个符号 var arr = new Array(); 但是,当在线测试时,例如在上,一个警告提示我“使用数组文字符号[]” 我没有找到避免使用构造函数的理由。在某些方面比使用[]效率低吗?还是不好的做法 是否有充分的理由使用var arr=[]而不是var arr=new Array()?构造函数可以接受的参数有一个限制 在我遇到的大多数系统上,限制为2^16(2字节): 这将导致错误(参数太多…) 当使用literal[]时,您不会遇到这样的问题 如果你不关
var arr = new Array();
但是,当在线测试时,例如在上,一个警告提示我“使用数组文字符号[]”
我没有找到避免使用构造函数的理由。在某些方面比使用[]
效率低吗?还是不好的做法
是否有充分的理由使用
var arr=[]代码>而不是var arr=new Array()代码>?构造函数可以接受的参数有一个限制
在我遇到的大多数系统上,限制为2^16(2字节):
这将导致错误(参数太多…)
当使用literal[]时,您不会遇到这样的问题
如果你不关心这么大的数组,我想你可以使用你喜欢的任何数组。大多数情况下,人们使用var a=[]
是因为
他的原因包括new Array()
的非直观和不一致行为:
请注意,使用new Array()
无法创建只包含一个预先指定的数字元素的数组
使用[]
实际上效率更高!可以覆盖数组
构造函数并使其执行奇怪的操作,但不能覆盖[]
的行为
就我个人而言,我总是使用[]
语法,同样地总是使用{}
语法来代替新对象()
这是因为新数组()
是不明确的。以下是正确的构造函数:
// Using brackets
[element0, element1, ..., elementN]
// Using new AND a list of elements
new Array(element0, element1, ..., elementN)
// Using new AND an integer specifying the array length
new Array(arrayLength)
不,实际上没有理由对空数组使用一种符号而不是另一种符号
然而,大多数浏览器使用x=[]显示出稍好的性能代码>而不是调用构造函数
如果需要创建具有特定大小的数组,则需要使用x=newarray(10)例如,code>将创建一个包含10个未定义插槽的数组。这两个插槽都是正确的。但是大多数人使用var a=[]
在JavaScript中声明数组的三种方法
方法1:我们可以使用JavaScript“new”关键字显式声明一个数组,以在内存中实例化该数组(即创建并使其可用)
方法2:我们使用另一种方法来声明数组
// Declare an array (using literal notation)
var arlene1 = [];
var arlene2 = ["First element", "Second", "Last"];
方法3:JavaScript还允许通过调用特定方法间接创建数组
// Create an array from a method's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");
- var arr=[]使用数组/对象文本
- var arr=new Array()使用数组/对象构造函数
定义数组或对象的最快方法是文本方式,因为您不需要调用构造函数
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];
alert(arr1[0]); // 1
alert(arr2[0]); // 1
var arr3 = new Array(200);
var arr4 = [200];
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200
是糖吗
var array = new Array(1, 2, 3, 4);
是salt吗?一个显著的区别是,[]
总是实例化一个新数组,而新数组
可能是
在我的示例代码中,我将数组
函数隐藏在文档范围的其余部分之外,但是,如果遇到这种问题,代码可能不会被很好地关闭,并且很难找到
免责声明:劫持数组
构造函数不是一个好主意。对于可维护性,请使用[]
数组文字更容易预测,因为大多数开发人员都使用它。大多数数组的使用都将使用文本,让您的代码与其他开发人员使用的代码匹配是有价值的
对于空数组,请使用[]
var ns=[];
变量名称=['john','brian'];
如图所示,将文本用于empty和几个已知元素比数组构造函数更复杂
对于已知大小的数组,请使用新数组(大小)
如果大小已知,那么使用数组构造函数可以显著提高性能。但是,这也意味着您必须处理已经有“未定义”填充的数组
所有这些都是价值观
如图所示
//用100个数字填充数组
var ns=新阵列(100);
对于(变量i=0;i<100;i++){
ns[i]=i;
}
这也适用于。两者都可以。您只需在传输中保存一些字节。确实存在差异。请参阅本文:注意:如果仅覆盖数组,则会有差异。@apkd在某些浏览器上,性能差异很大。我在链接的问题上没有看到这一点。@Alnitak:您已经提到过,它不是非常直观和简洁。我放了一个jsperf来比较性能:。至少对我来说,在Ubuntu上的Chrome 20上,文本的速度是构造函数的两倍。@jAndy,.jAndy,为什么你想要一个JavaScript中有“10个空槽”的数组?实际上,您可以使用:var arr=[];arr[9]=“ω”;1.JS中的数组是完全动态的,你可以引用任何你想要的索引,它只是“未定义的”。这就像你说的那样:var arr=newarray(10);arr[23];2.数组的长度将被设置为包含任何内容的最大值,而不管其间有多少未定义的插槽。或者你可以自己设置。[]可能无法治愈癌症,但效果稍好。作为参考,在幕后,var arr=[]代码>在逻辑上也使用构造函数。它始终是内置的数组构造函数,而不是当前名为array
“您不能覆盖[]的行为”的任何函数。您确定这一点吗?我认为至少在某些实现中,您可以覆盖数组构造函数以影响[],覆盖对象构造函数以影响{}。@Random832可能在较旧的浏览器中,但在ES5兼容的实现中不适用,因为规范规定,[]
调用内部构造函数,不是数组中的任何值。构造函数当时正好有。另外:数组文字比cre快得多
// Create an array from a method's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];
alert(arr1[0]); // 1
alert(arr2[0]); // 1
var arr3 = new Array(200);
var arr4 = [200];
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200
var array = [ 1, 2, 3, 4];
var array = new Array(1, 2, 3, 4);
(function () {
"use strict";
var foo,
bar;
//don't do this, it's a bad idea
function Array() {
alert('foo');
}
foo = new Array();
bar = [];
}());