在javascript中检查变量类型的最佳方法是什么

use*_*818 7 javascript

<script type="text/javascript">   
function saveName (firstName) {
    function capitalizeName () {
        return firstName.toUpperCase();
    }
    var capitalized = capitalizeName();console.log(capitalized instanceof String);
    return capitalized; 
}
console.log(saveName("Robert")); // Returns "ROBERT"
</script>
Run Code Online (Sandbox Code Playgroud)

题:

我想检查大写的类型,所以我使用capitalized instanceof String?但它显示:false在控制台中,我不想尝试capitalized instanceof Function,Object...这将花费太多时间,那么检测变量类型的最佳方法是什么?

Fas*_* kk 21

使用typeof();

例子:

> typeof "foo"
"string"
> typeof true
"boolean"
> typeof 42
"number"
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

if(typeof bar === 'string') {
   //whatever
}
Run Code Online (Sandbox Code Playgroud)

请记住,typeof 仅适用于返回“原始”类型:数字、布尔值、对象、字符串。您还可以使用instanceof来测试对象是否属于特定类型。

function MyObj(prop) {
  this.prop = prop;
}

var obj = new MyObj(10);

console.log(obj instanceof MyObj && obj instanceof Object); // outputs true
Run Code Online (Sandbox Code Playgroud)


Lan*_*opp 16

最好的方法是使用typeof关键字.

typeof "hello" // "string"
Run Code Online (Sandbox Code Playgroud)

typeof操作映射操作数以六个值之一:"string","number","object","function","undefined""boolean".该instanceof方法测试所提供的函数的原型是否在对象的原型链中.

这篇Wikibooks文章以及这篇MDN文章在总结JavaScript类型方面做得非常好.


min*_*eek 12

2021+ 一字答案。

我最喜欢的方式是使用typeof

为什么? 因为它不给出除布尔、字符串、数字和函数之外的真实类型。

然后呢? 这是使用的小实用函数Object.prototype

var trueTypeOf = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
Run Code Online (Sandbox Code Playgroud)

结果:

trueTypeOf([]); // array
trueTypeOf({}); // object
trueTypeOf(''); // string
trueTypeOf(new Date()); // date
trueTypeOf(1); // number
trueTypeOf(function () {}); // function
trueTypeOf(/test/i); // regexp
trueTypeOf(true); // boolean
trueTypeOf(null); // null
trueTypeOf(); // undefined
Run Code Online (Sandbox Code Playgroud)