Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';var x=new Array()的错误;_Javascript_Jslint - Fatal编程技术网

Javascript 什么';var x=new Array()的错误;

Javascript 什么';var x=new Array()的错误;,javascript,jslint,Javascript,Jslint,在JSLint中,它警告 var x = new Array(); (这不是真正的变量名)应该是 var result = []; 第一个语法有什么问题?这个建议背后的原因是什么?使用[]比使用新数组()更安全,因为您实际上可以在JavaScript中重写数组的值: Array = function() { }; var x = new Array(); // x is now an Object instead of an Array. 换句话说,[]是明确的。。因此,如果可能的话。创

在JSLint中,它警告

var x = new Array();
(这不是真正的变量名)应该是

var result = [];

第一个语法有什么问题?这个建议背后的原因是什么?

使用
[]
比使用
新数组()
更安全,因为您实际上可以在JavaScript中重写
数组的值:

Array = function() { };

var x = new Array();
// x is now an Object instead of an Array.

换句话说,
[]
是明确的。

。因此,如果可能的话。创建一个新的数组对象不需要使用
new

第一个语法本身没有什么问题。实际上,在上,它列出了
newarray()
作为创建数组的方法。问题是这是“旧方法”。新方法较短,允许您初始化数组中的值,如
[“foo”,“bar”]
中的值。就良好的风格而言,大多数开发人员更喜欢
[]
而不是
新数组()

这两种形式都没有问题,但您通常会看到尽可能使用文字-


var s=''并不比var s=new String()更正确。…

根据您使用的浏览器或环境,您似乎可以获得不同的性能,具体取决于您使用的浏览器或环境:

([1,2]与新数组(1,2))相比,在这种情况下,文本速度要快得多


(新数组(500000)vs[]长度(500000))在chrome v21中,新数组的速度更快,在本测试中,新数组的速度大约为7%或30%,具体取决于您所做的操作。

第一个语法没有问题。第二个很短,很好!请注意,重写数组还会导致代码中出现严重问题,这些代码试图在类似数组的对象(如参数)上使用Array.prototype方法。。。这仍然是一个非常糟糕的主意。不仅如此,Array()构造函数还有一些“奇怪”的行为,这取决于您传递的参数数量。一般来说,这很奇怪,最好避免。别误会,我肯定不会推广覆盖数组。(好吧,除非您也重写'undefined'和'NaN',只是为了对付任何敢于使用您的代码的人。)如果您重写数组,var x=[]会发生什么情况;这是一个数组对象,不是吗?[]将始终是一个数组对象。当我说“override”时,我并不是指实际的数组类被重写。“Array”实际上是一个全局变量,因此可以分配一个新值——因此我重新分配变量“Array”引用的内容。用于引用的数组仍然完好无损。(这也是为什么我开玩笑说要覆盖'undefined'和'NaN'的原因——它们也是全局变量,可以以同样的扭曲方式进行操作。)但是,当您尝试使用n个值初始化数组时,jslint会中断。例如:var x=新数组(20);这种创建方法并不经常使用,但它有其自身的情况,并且比使用循环创建和填充数组快得多。您只需将第n个元素设置为未定义,它的作用大致相同。不过,在声明时无需将数组初始化为特定大小。JavaScript数组与C数组不同。它们是对象,不是静态大小的连续内存块。因此,您可以根据需要将值附加到数组中。事实上,在声明时初始化和稍后填充可能会比较慢,因为在声明时,所有n键都必须散列,然后当它们被赋值时,可能必须重新散列。可能是因为w3学校与w3.org没有关联,而且它们的代码通常很差或不准确。@AndrewAustin True。尽管在互联网络中,作为一般的经验法则,无论从何处获取信息,都应该仔细检查来源。