乐趣区

关于javascript:每日一问nodejs中是如何判断类型的

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 代码传送门

退出移动版