JavaScript中的类型

在ECMAScript标准中,一共有八种数据类型:

  • 7种原始类型

    • Boolean
    • Null
    • Undefined
    • Number
    • BigInt
    • String
    • Symbol
  • Object

那么问题来了,应该如何判断这些类型?下面是node中判断上述类型的相关代码(BigInt除外),基本上基于typeof进行判断。说到typeof那就不得不提下面的话题:

知识储备

typeof对null类型错误的返回值

下面直接引用MDN的解释
image.png

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


修仙大橙子
108 声望16 粉丝

前端工程师