typeof 是一个 JavaScript 关键字,当你使用它时,将返回变量的类型。你可以使用它来验证函数参数或检查是否定义了变量。它还有其他用途。

typeof 运算符很有用,因为它是检查代码中变量类型的简便方法。这很重要,因为 JavaScript 是一种动态类型的语言,这意味着在创建变量时无需确定变量的类型,也就是说在创建变量时类型不会被限制,可以在程序运行时更改其类型。

例如:

var x = 12345; // number
x = 'string'; // string
x = { key: 'value' }; // object

从上面的示例可以看出,JavaScript 中的变量可以在程序执行期间更改类型。程序员可能很难跟踪类型的变化,这就是 typeof 运算符发挥作用的地方。

typeof 运算符返回一个表示变量当前类型的字符串。你可以通过键入 typeof(variable)typeof variable 来使用它。回到上一个示例,你可以在每个阶段使用它来检查变量 x 的类型:

var x = 12345; 
console.log(typeof x) // number
x = 'string'; 
console.log(typeof x) // string
x = { key: 'value' };
console.log(typeof x) // object

这对于检查函数中变量的类型很有用。

这是一个函数示例,该函数可以接受字符串或数字类型的变量:

function doSomething(x) {
  if(typeof(x) === 'string') {
    alert('x is a string')
  } else if(typeof(x) === 'number') {
    alert('x is a number')
  }
}

typeof 运算符的另一个用法是,在尝试在代码中访问变量之前,确保已定义了变量。这可以帮助防止程序中因为访问未定义的变量而发生的错误。

function(x){
  if (typeof(x) === 'undefined') {
    console.log('variable x is not defined');
    return;
  }
  // continue with function here...
}

当检查数字时,typeof 运算符的输出可能并不总是如你所期望的。数字可能由于多种原因而变成 NaN(Not A Number)。

console.log(typeof NaN); //"number"

如果你忘记了访问对象内部的数字,你可能会将一个对象与一个数字相乘,

var x = 1;
var y = { number: 2 };
console.log(x * y); // NaN
console.log(typeof (x * y)); // number

检查数字时,仅对数字 typeof 的输出进行检查是不够的,因为 NaN 也可以通过测试。下面的函数检查数字,同时不允许 NaN 值通过。

function isNumber(data) {
  return (typeof data === 'number' && !isNan(data));
}

即使这是一种有用的验证方法,我们也要小心,因为 JavaScript 有一些奇怪的情况,其中之一是在特殊情况下使用 typeof 验证的结果。例如,在 JavaScript 中,很多东西都只是对象。

var x = [1,2,3,4]; 
console.log(typeof x)  // object

console.log(typeof null)  // object

原文:JavaScript Data Types: Typeof Explained