-2

作为初学者,使用现有代码时,我遇到了以下问题:

var foo = {};

我认为这相当于:

var foo = new Object();

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

var foo;
4

3 回答 3

5

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

那是一种错误的印象。如果您声明一个变量但不为其赋值,它会被初始化为undefined(如规范中所述并详细描述),它不是一个对象(它是一个原始值):

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
于 2013-03-20T10:25:01.197 回答
0

詹姆斯的回答是正确的。万一他太快地抛出太多信息(如果是这样,请稍后再参考),这里有一个快速总结。

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

变富; 除了声明一个变量之外什么都不做。默认为“未定义”。

于 2013-03-20T10:50:55.017 回答
-1

var foo = new Object() 还给新对象一个原型属性,可用于操作对象继承和调用由 javascript 定义的标准对象函数

有关如何操作 object.protype 的详细信息,请参见此处:

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

于 2013-03-20T10:33:10.770 回答