我在W3school看到以下声明。关于JavaScript数据类型和对象类型的困惑
我从一个初学者的java后台来了,所以在JavaScript对象的数据类型和种类是混淆了我不少。我有几个问题:
- “对象”数据类型由什么组成?
- 数据类型“对象”和对象类型“对象”之间的区别是什么?
- 当我试图通过键入
typeof null
来找出“null”的数据类型时,我的IDE告诉我它是“object”类型,而不是“null”类型,这正是我所期望的。
我在W3school看到以下声明。关于JavaScript数据类型和对象类型的困惑
我从一个初学者的java后台来了,所以在JavaScript对象的数据类型和种类是混淆了我不少。我有几个问题:
typeof null
来找出“null”的数据类型时,我的IDE告诉我它是“object”类型,而不是“null”类型,这正是我所期望的。typeof
将始终返回原始类型。 ('字符串','数字','对象'等)。
对象是基元类型结构,是一系列名称 - 值对存储的基本数据类型的无序列表。
Object
是对象基元的构造函数。
var test = {};
console.log(typeof test); // object
console.log(test instanceof object) // false
console.log(test instanceof Object) // true
据此,检查日期或数组,使用typeof
将返回object
:
typeof []; // object
typeof new Date(); // object
要测试的对象实际上是一个日期或一个数组,你可以使用instanceof
:
[] instanceof Array; // true
new Date() instanceof Date; // true
关于typeof null
,这是根据the MDN ECMAScript中的错误,应该为null。该错误详见this answer。 A fix已经通过选择加入,不幸的是,由于代码使用这个特定的'错误'来测试null
,所以更改被拒绝。
W3Schools(不要误解W3C(万维网联盟))经常包含非常不准确的信息。 Discussion: Why not w3schools.com。例如,使用MDN提供的信息。
以下是有关在Javascript中的数据类型的文章,你会发现有用: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
回答您的问题:
对象只是属性的集合:组合一键之间(字符串,数字,对象...)和值:其他对象,函数,字符串,数字...数组(有一些自定义的东西,如索引等)和日期是对象。
没有对象和对象这样的东西。
typeof null返回对象的原因是因为从未更改过的旧规格。 Why is typeof null “object”?
“W3School不是官方消息来源”---公平地说MDN绝不是“官方消息”。只有标准是。 – zerkms
@zerkms你是对的,我会更新答案。 –
我认为这些信息很混乱,如果不是明显的错误。函数也是对象。还有很多其他的对象在这里没有提到:Number,String,RegExp ... –
“我在W3school看到以下声明。” ---第一条规则,不要使用w3schools。决不。 **决不**。 – zerkms
请尝试[MDN文档](https://developer.mozilla.org/en/docs/Web/JavaScript/Data_structures)。 – Tigger