首页 > 判断字符串类型typeof 和 Object.prototype.toString.call 的区别

判断字符串类型typeof 和 Object.prototype.toString.call 的区别

问题:判断s的类型是不是字符串


var s = "123";
//我自己的思路
alert(typeof s);
//我在论坛上看到的某大神的思路
alert(Object.prototype.toString.call(s));

那么问题来了,这两种方式有什么区别和各自的优缺点呢?求大神解答!


var a = null;
console.log(typeof a); //object
console.log(Object.prototype.toString.call(a)); // [object Null]

var a = {};
console.log(typeof a); //object
console.log(Object.prototype.toString.call(a)); // [object Object]

可以把代码copy到控制台输出一遍看看结果
可见给a赋予不同的数据类型,
typeof检测a的数据类型始终得出object,
Object.prototype.toString.call()则得出不一样的结果,
说明typeof检测数据类型存在缺陷,
在某些情况下会不能正确检测。
至于为什么使用Object.prototype.toString.call(),自行谷歌百度了解去吧


Object.prototype.toString.call()是对象的方法,调用的时候会先调用构造函数 new Object(),故可以分辨出引用类型;

var x = 'a string'; // 所有基础类型(String, Number, Boolean)都可以不通过构造函数生成。
var y = []; // 非基础类型(引用类型),调用构造函数生成的。
console.log(x instanceof String); // false
console.log(y instanceof Array); // true
x2 = new Object(x);
console.log(x2 instanceof String); //true

typeof 只能辨别出基础类型(6种)。


typeof 认为'str'是字符串而new String('str')不是字符串

Object.prototype.toString 认为上面两个都是字符串
【热门文章】
【热门文章】