作为初学者,使用现有代码时,我遇到了以下问题:
var foo = {};
我认为这相当于:
var foo = new Object();
我的印象是任何变量都会自动成为对象,所以专门编码的目的是什么,而不是仅仅声明一个空变量:
var foo;
作为初学者,使用现有代码时,我遇到了以下问题:
var foo = {};
我认为这相当于:
var foo = new Object();
我的印象是任何变量都会自动成为对象,所以专门编码的目的是什么,而不是仅仅声明一个空变量:
var foo;
我的印象是任何变量都会自动成为对象
那是一种错误的印象。如果您声明一个变量但不为其赋值,它会被初始化为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
詹姆斯的回答是正确的。万一他太快地抛出太多信息(如果是这样,请稍后再参考),这里有一个快速总结。
你是对的: var foo = {} 和 var foo = new Object() 不仅是等价的,结果也是一样的。仅使用对象文字。(忽略 new Object()、new Array() 等)。
变富; 除了声明一个变量之外什么都不做。默认为“未定义”。
var foo = new Object() 还给新对象一个原型属性,可用于操作对象继承和调用由 javascript 定义的标准对象函数
有关如何操作 object.protype 的详细信息,请参见此处:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/prototype