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 属性是元素的个数。
你不知道的JavaScript(中卷)——1.2 内置类型
书名: 你不知道的JavaScript(中卷)
作者: [美] Kyle Simpson
出版社: 人民邮电出版社
译者: 单 业 | 姜 南 | 单业 | 姜南
出版年: 2016-8
页数: 358
定价: 79.00元
装帧: 平装
ISBN: 9787115431165