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