JS - typeof 和 undefined,Null,Boolean 类型

108 阅读2分钟

在开发的过程中,判断某些类型可以让我们避免出现因为数据类型而出现的错误,比如 Uncaught TypeError: Cannot destructure property 'v2' of 'undefined' as it is undefined. 因此了解编程语言的数据类型是必须的。

数据类型

  • 6 种简单数据类型(原始类型):Number(数值),Boolean(布尔值),String(字符串),Undefined(未定义),Null,Symbol(ES6 新增)
  • 复杂数据类型Object(注意 null 值也是属于 object)

typeof 操作符

因为 ECMAScript 的类型系统是松散的,所以需要一种手段来确定任意变量的数据类型。typeof 由此而生, 对一个值使用 typeof 操作符会返回的枚举字符串有:

  • "undefined" 表示值未定义
  • “boolean” 表示值的类型为 布尔值
  • “string” 表示值为字符串
  • “number” 表示值为数值
  • “symbol“ 表示值为 Symbol 符号类型
  • ”object“ 表示值为对象(而不是函数) 或 null;
  • ”function“ 表示值为函数类型
const bool = false;
const num = 11;
const str = 'string';
const obj = {};
const nullVariable = null;
const fn = () => {};
const symbol = Symbol('symbol');

console.log(typeof bool); // "boolean"
console.log(typeof num); // "number"
console.log(typeof str); // "string"
console.log(typeof obj); // "object"
console.log(typeof nullVariable); // "object", 可以理解为 null 被认为是空对象的引用
console.log(typeof fn); // "function"
console.log(typeof symbol); // "symbol"


// typeof 是操作符而不是函数,但是可以使用参数 比如 typeof(bool)

注意⚠️: 函数 和 其他对象的区别可以使用 typeof fnVariable 是不是等于 "function"; 操作符 typeof 对 null 值返回的类型为 "object",可理解为 null 是空对象指针

Undefined 类型

Undefined 类型只有一个值(undefined),表示声明了变量但没有初始化值。

注意⚠️:显示使用 undefined 来初始化值是没有必要的,包含 undefined 值的变量和未定义的变量是有区别的(使用没有),但是声明未赋值为非 undefined 的变量 和未声明的变量,typeof 返回的都是 "undefined"。

// 未被声明的 age 和 声明了但是包含值为 undefined 的区别
let v;
console.log(v); // undefined
console.log(age); // ReferenceError: age is not defined

Null 类型

Null 类型的唯一特殊值 null,在非严格相等的情况下,undefined 和 null 是相等的

console.log(null == undefined); // true, undefined 值是由 null 值派生而来的,但是类型不同
console.log(null === undefined); // false,类型不同所以不相等

Boolean 类型

Boolean(布尔值)只有两个值 true、false,且他们严格区分大小写。Boolean(val)转化函数可以在任意类型的数值上调用,而且始终返回一个布尔值,if 等流程控制语句自动转换就是使用的 Boolean,转换为 false 的值有且只有 false,空字符(""), 0, NaN, null, undefined

const falseList = ['', null, undefined, NaN, false, 0];
falseList.forEach((v) => console.log(Boolean(v))); // print all false