2016-08-23 89 views
0

我在W3school看到以下声明。关于JavaScript数据类型和对象类型的困惑

enter image description here

我从一个初学者的java后台来了,所以在JavaScript对象的数据类型和种类是混淆了我不少。我有几个问题:

  1. “对象”数据类型由什么组成?
  2. 数据类型“对象”和对象类型“对象”之间的区别是什么?
  3. 当我试图通过键入typeof null来找出“null”的数据类型时,我的IDE告诉我它是“object”类型,而不是“null”类型,这正是我所期望的。
+3

我认为这些信息很混乱,如果不是明显的错误。函数也是对象。还有很多其他的对象在这里没有提到:Number,String,RegExp ... –

+4

“我在W3school看到以下声明。” ---第一条规则,不要使用w3schools。决不。 **决不**。 – zerkms

+0

请尝试[MDN文档](https://developer.mozilla.org/en/docs/Web/JavaScript/Data_structures)。 – Tigger

回答

1

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 answerA fix已经通过选择加入,不幸的是,由于代码使用这个特定的'错误'来测试null,所以更改被拒绝。

1

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”?

+0

“W3School不是官方消息来源”---公平地说MDN绝不是“官方消息”。只有标准是。 – zerkms

+0

@zerkms你是对的,我会更新答案。 –