为什么将变量声明为新对象?

时间:2013-03-20 10:23:28

标签: javascript

作为初学者,使用现有代码,我遇到了以下内容:

var foo = {};

我认为相当于:

var foo = new Object();

我的印象是任何变量都自动成为一个Object,所以具体编码的目的是什么,而不仅仅是声明一个空变量:

var foo;

3 个答案:

答案 0 :(得分:5)

  

我的印象是任何变量都自动成为对象

这是一个错误的印象。如果您声明一个变量而不为其赋值,则会将其初始化为undefined(如提及in the spec并描述in detail),这不是对象(它是原始值) :

var foo;
console.log(foo); // undefined

如果您尝试设置未定义变量的属性,您将收到TypeError:

var foo;
foo.example = "hello"; // TypeError: Cannot set property 'example' of undefined

但是,如果为该变量分配一个空对象,则上述代码将成功:

var foo = {}; // Now refers to an empty object (equivalent to `new Object()`)
foo.example = "hello";
console.log(foo); // '{example:"hello"}'

我相信你的理解可能源于常见的误解“JavaScript中的一切都是一个对象”。 这不是真的。 JavaScript中的许多东西都是对象,但原始值却不是。例如:

var a = "hello"; // String primitive, not an object
var b = new String("hello"); // String instance, object
var c = 10; // Number primitive, not an object
var d = true; // Boolean primitive, not an object
var e; // Undefined value, not an object
var f = null; // Null value, not an object

答案 1 :(得分:0)

詹姆斯的回答是正确的。如果他过快地抛出太多信息(稍后再回过头来看,如果有的话),这里有一个快速摘要。

你是对的:var foo = {}和var foo = new Object()不仅是等价的,结果是相同的。仅使用对象文字。 (忽略新的Object(),new Array()等)。

var foo;除了声明一个变量之外别无其他。它是未定义的'默认情况下。

答案 2 :(得分:-1)

var foo = new Object()还为新对象提供了一个prototype属性,可用于操作对象继承并调用javascript定义的标准对象函数

请参阅此处了解有关如何操作object.protype的详细信息:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/prototype