作为初学者,使用现有代码,我遇到了以下内容:
var foo = {};
我认为相当于:
var foo = new Object();
我的印象是任何变量都自动成为一个Object,所以具体编码的目的是什么,而不仅仅是声明一个空变量:
var foo;
答案 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