关于JavaScript数据类型和对象类型的混淆

时间:2016-08-23 08:09:06

标签: javascript

我在W3school看到了以下陈述。

enter image description here

我来自初学者java背景,因此javascript中的数据类型和对象类型让我感到困惑。我有几个问题:

  1. "对象"数据类型包括?
  2. 数据类型"对象"之间有什么区别?和对象类型"对象"?
  3. 当我试图找出" null"的数据类型时通过键入typeof null,我的IDE告诉我它的类型为" object",而不是类型" null",这是我的预期。

2 个答案:

答案 0 :(得分:1)

typeof将始终返回基元类型。 ('string','number','object'等)。

对象是基本类型结构,是作为一系列名称 - 值对存储的原始数据类型的无序列表。

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 :(得分:1)

<3> W3Schools(不要误解为W3C(万维网联盟))通常包含非常不准确的信息。 Discussion: Why not w3schools.com。相反,请使用MDN提供的信息。

这是一篇关于Javascript中数据类型的文章,你会发现它很有用: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

回答你的问题:

对象只是属性的集合:键(字符串,数字,对象......)和值之间的组合:其他对象,函数,字符串,数字,......数组(包含一些自定义内容,如索引)等)和日期是对象。

没有对象和对象这样的东西。

typeof null返回object的原因是因为旧的规范从未更改过。 Why is typeof null “object”?