1.2 内置类型
JavaScript 有七种内置类型:
· 空值(null )
· 未定义(undefined )
· 布尔值(boolean )
· 数字(number )
· 字符串(string )
· 对象(object )
· 符号(symbol ,ES6 中新增)
除对象之外,其他统称为“基本类型”。
我们可以用 typeof 运算符来查看值的类型,它返回的是类型的字符串值。有意思的是,这七种类型和它们的字符串值并不一一对应:
typeof undefined === "undefined"; // true typeof true === "boolean"; // true typeof 42 === "number"; // true typeof "42" === "string"; // true typeof { life: 42 } === "object"; // true // ES6中新加入的类型 typeof Symbol() === "symbol"; // true
以上六种类型均有同名的字符串值与之对应。符号是 ES6 中新加入的类型,我们将在第 3 章中介绍。
你可能注意到 null 类型不在此列。它比较特殊 ,typeof 对它的处理有问题:
typeof null === "object"; // true
正确的返回结果应该是 "null" ,但这个 bug 由来已久,在 JavaScript 中已经存在了将近二十年,也许永远也不会修复,因为这牵涉到太多的 Web 系统,“修复”它会产生 更多的 bug,令许多系统无法正常工作。
我们需要使用复合条件来检测 null 值的类型:
var a = null; (!a && typeof a === "object"); // true
null 是基本类型中唯一的一个“假值”(falsy 或者 false-like,参见第 4 章)类型,typeof 对它的返回值为 "object" 。
还有一种情况:
typeof function a(){ /* .. */ } === "function"; // true
这样看来,function (函数)也是 JavaScript 的一个内置类型。然而查阅规范就会知道,它实际上是 object 的一个“子类型”。具体来说,函数是“可调用对象”,它有一个内部属性 [[Call]] ,该属性使其可以被调用。
函数不仅是对象,还可以拥有属性。例如:
function a(b,c) { /* .. */ }
函数对象的 length 属性是其声明的参数的个数:
a.length; // 2
因为该函数声明了两个命名参数,b 和 c ,所以其 length 值为 2 。
再来看看数组。JavaScript 支持数组,那么它是否也是一个特殊类型?
typeof [1,2,3] === "object"; // true
不,数组也是对象。确切地说,它也是 object 的一个“子类型”(参见第 3 章),数组的元素按数字顺序来进行索引(而非普通像对象那样通过字符串键值),其 length 属性是元素的个数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论