为什么JavaScript对同一行为有不同的声明?

时间:2012-07-20 23:52:39

标签: javascript html

我为什么要申报

var foo = {}

而不是

var foo = new Object();
如果它们相似,那么在JavaScript中

这同样适用于

foo[0].bar = new Function(){ "return hello"};

foo[0].bar = function(){return "hello"};

? 这是效率问题吗?它有所不同吗?

5 个答案:

答案 0 :(得分:2)

我记得从w3fools.com阅读以下内容:

  

personObj=new Object();

     

这是对new关键字的错误和不必要的使用。他们应该是   使用和提倡对象文字语法({})来创建新语法   对象。

它没有说明为什么,只是我们应该这样做。

答案 1 :(得分:2)

实际上

var foo = {}

var foo = new Object();

做同样的事情(两个表达式都创建一个空的Object)但最好使用更短的版本(object literal),它需要更少的空间时间来编写,而另一个使用{{1}的东西您可以创建{/ 1}}并将值/属性分配给object literal,如下所示

Object

但是使用person = { property1 : "Hello" }; ,您需要先创建它,然后按如下方式分配值/属性

new Object()

在您的第二个示例(person = new Object(); person.property1 = "Hello"; )中存在差异,因为function vs new functionnew Function,您可以查看this test here

答案 2 :(得分:0)

没有效率增加或减少,它只是简单的使用? :对于if / else ..

我总是使用速记{}但是如果你想让初学者阅读你的代码,你可能想要使用新的Object()。

答案 3 :(得分:0)

唯一可能重要的是,如果你写一个动态生成这样的javascript的程序......或者你在大学里某个老师的写作似乎有一定的标准,但有时候并不合理。< / p>

答案 4 :(得分:0)

new Function()构造函数并没有真正起作用。

它被称为:

var myFunc = new Function("param1", "param2", "message", "/*function-body-as-a-string*/ console.log(message); return param1 + \"=\" + param2;");

即:非常愚蠢,容易出错,愚蠢 - 慢(使用eval)和安全漏洞。 不要使用它。