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

Javascript 为什么要将变量声明为新对象?,javascript,Javascript,作为一名初学者,在使用现有代码时,我遇到了以下几点: var foo = {}; 我认为这相当于: var foo = new Object(); 我的印象是,任何变量都会自动成为一个对象,因此,专门对其进行编码的目的是什么,而不仅仅是声明一个空变量: var foo; 我的印象是,任何变量都会自动成为一个对象 这是一个错误的印象。如果您声明了一个变量,但未为其赋值,则会将其初始化为未定义的(如上所述),这不是一个对象(它是一个基本值): 如果试图设置未定义变量的属性,则会收到TypeEr

作为一名初学者,在使用现有代码时,我遇到了以下几点:

var foo = {};
我认为这相当于:

var foo = new Object();
我的印象是,任何变量都会自动成为一个对象,因此,专门对其进行编码的目的是什么,而不仅仅是声明一个空变量:

var foo;
我的印象是,任何变量都会自动成为一个对象

这是一个错误的印象。如果您声明了一个变量,但未为其赋值,则会将其初始化为
未定义的
(如上所述),这不是一个对象(它是一个基本值):

如果试图设置未定义变量的属性,则会收到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=new Object()还为新对象提供了一个原型属性,可用于操作对象继承和调用javascript定义的标准对象函数

有关如何操作对象的详细信息,请参见此处。protype:


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

这是正确的:var foo={}和var foo=new Object()不仅是等价的,而且结果是相同的。仅使用对象文字。(忽略新对象()、新数组()等)


var foo;只声明一个变量。默认情况下,它是“未定义的”。

回答得好。如果我们初始化成为object的变量?@sasi-如果您将一个对象分配给该变量,那么它将引用一个对象。如果您为它指定了其他内容(例如字符串文字),那么它将引用该内容。该规范引用有点夸张,我认为上一节更简单。请注意,您可以将变量初始化为基本类型,而不是javascript中的所有变量都必须是未定义的或对象。字符串、数字和布尔值是基本类型。当您调用一个方法(数字、字符串和布尔对象)时,这些原语会自动包装在相应的对象中@RobG-同意,我没有注意到variable statements部分顺便提到它。我添加了一个指向答案的链接。谢谢。函数有原型。对象具有构造函数。构造函数是函数。{}和new Object()是相同的。使用文本({})语法。var f={};f、 建造师//函数Object(){}f.constructor.prototype//Object{}O是的,对不起,我没在想
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