JavaScript typeof

typeof 是 JavaScript 的一个运算符,返回一个表示操作数的数据类型的字符串。

typeof 是 JavaScript 的一个运算符,返回一个表示操作数的数据类型的字符串。

在 JavaScript 中有 5 种不同的数据类型:

  • string
  • number
  • boolean
  • object
  • function
  • null
  • undefined

有 6 种类型的对象:

  • Object
  • Date
  • Array
  • String
  • Number
  • Boolean

typeof 语法

我们可以使用 typeof 运算符来查找 JavaScript 变量的数据类型。

typeof 运算符后接操作数:

typeof x;
;
typeof x;

说明:

  • x 是 typeof 的操作数,可以是一个变量或者一个具体的值。
  • typeof 的返回值是字符串,可能的返回值有:
    • “undefined”
    • “object”
    • “boolean”
    • “number”
    • “bigint” (ECMAScript 2020 新增)
    • “string”
    • “symbol” (ECMAScript 2015 新增)
    • “function”
    • “object”

typeof 示例:

typeof "John"; // 返回 "string"
typeof 3.14; // 返回 "number"
typeof NaN; // 返回 "number"
typeof false; // 返回 "boolean"
typeof [1, 2, 3, 4]; // 返回 "object"
typeof { name: "John", age: 34 }; // 返回 "object"
typeof new Date(); // 返回 "object"
typeof function () {}; // 返回 "function"
typeof myCar; // 返回 "undefined" *
typeof null; // 返回 "object"

请注意:

  • NaN 的数据类型是数字
  • 数组的数据类型是对象
  • 日期的数据类型是对象
  • null 的数据类型是 object
  • 未定义变量的数据类型为 undefined
  • 未赋值的变量的数据类型也是 undefined

typeof 不能确定 JavaScript 对象是否为数组(或日期)。

构造函数属性

constructor 属性返回所有 JavaScript 变量的构造函数。

"John".constructor                // 返回 function String()  {[native code]}
(3.14).constructor                // 返回 function Number()  {[native code]}
false.constructor                 // 返回 function Boolean() {[native code]}
[1,2,3,4].constructor             // 返回 function Array()   {[native code]}
{name:'John',age:34}.constructor  // 返回 function Object()  {[native code]}
new Date().constructor            // 返回 function Date()    {[native code]}
function () {}.constructor        // 返回 function Function(){[native code]}

通过搜索构造函数字符串是否含有 Array 判断是否数组对象:

function isArray(myArray) {
  return myArray.constructor.toString().indexOf("Array") > -1;
}

或者更简单,您可以直接判断构造函数对象是否为 Array

function isArray(myArray) {
  return myArray.constructor === Array;
}

通过搜索构造函数字符串是否含有 Date 判断是否数组对象:

function isDate(myDate) {
  return myDate.constructor.toString().indexOf("Date") > -1;
}

或者更简单,您可以直接判断构造函数对象是否为 Date

function isDate(myDate) {
  return myDate.constructor === Date;
}

undefined

在 JavaScript 中,没有值的变量的值为 undefined ,类型也是 undefined

let car; // 值是 undefined, 类型也是 undefined

将值设置为 undefined ,可以清空任何变量,类型也会变为 undefined .

car = undefined; // 值变成了 undefined, 类型也是 undefined

空字符串

空字符串与 undefined 无关。

空字符串的类型是 string:

let car = "";
typeof car; // 返回 "string"

null

在 JavaScript 中 null 是“无”,它代表是不存在的东西。

在 JavaScript 中, null 的数据类型是 object

您可以通过将对象设置 null 为来清空对象:

let person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };
person = null; // 现在值为 null, 但是类型仍然是 "object"

您还可以通过将对象设置为 来清空对象 undefined

let person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };
person = undefined; // 现在值和类型都是 "undefined"

undefined 和 null 的区别

undefinednull 值相等但类型不同:

typeof undefined; // 返回 "undefined"
typeof null; // 返回 "object"
null === undefined; // 返回 "false"
null == undefined; // 返回 "true"
  • undefined 的数据类型是 undefined , null 的数据类型是 object
  • null == undefined 返回 true,说明他们的值是相等的
  • null === undefined 返回 false,说明他们的数据类型不同