JavaScript 中的类型
在 ECMAScript 规范中,一共有八种数据类型:
-
7 种原始类型
- Boolean
- Null
- Undefined
- Number
- BigInt
- String
- Symbol
- Object
那么问题来了,应该如何判断这些类型?上面是 node 中判断上述类型的相干代码(BigInt 除外),基本上基于 typeof
进行判断。说到 typeof
那就不得不提上面的话题:
常识储备
typeof 对 null 类型谬误的返回值
上面间接援用 MDN 的解释
null 谬误,考古文传送门
因而前面的代码对于 typeof null === 'object'
这个问题,有所兼容。
还有一个问题就是,在下面的定义中,一共有七种原始类型,那么问题来了:
什么是原始类型?
MDN 中的解释为:
除 Object 以外的所有类型都是不可变的(值自身无奈被扭转)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作肯定返回了一个新字符串,原始字符串并没有被扭转)。咱们称这些类型的值为“原始值”。
常识储备结束,咱们上面开始判断类型:
node.js 中判断源码
如何判断原始类型?
function isPrimitive(arg) {
return arg === null ||
(typeof arg !== 'object' && typeof arg !== 'function');
}
如何判断布尔类型?
function isBoolean(arg) {return typeof arg === 'boolean';}
如何判断 null?
function isNull(arg) {return arg === null;}
如何判断 undefined?
function isUndefined(arg) {return arg === undefined;}
如何判断 null 或 undefined?
function isNullOrUndefined(arg) {return arg === null || arg === undefined;}
如何判断数字类型?
function isNumber(arg) {return typeof arg === 'number';}
如何判断字符串类型?
function isString(arg) {return typeof arg === 'string';}
如何判断 symbol 类型?
function isSymbol(arg) {return typeof arg === 'symbol';}
如何判断对象类型?
function isObject(arg) {return arg !== null && typeof arg === 'object';}
如何判断是函数?
function isFunction(arg) {return typeof arg === 'function';}
以上代码在仓库中的地位
node 代码传送门