js 使用toSting

2020-05-14  本文已影响0人  鹏雨燕
10.toString(); //"10"
(10).toString(2); //10进制转2进制 1010

const arr=[1,2,3];
Object.prototype.toString.call(arr); //"[object Array]" 
Array.prototype.toString.call(arr); //1,2,3
[1,2].toString(); // "1,2"  得到字符串

在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object”,“function”,“symbol” (ES6新增)七种。

数组、null、对象,使用 typeof 都会统一返回 “object” 字符串。所以我们用toString

js中的对象都继承自Object,所以当我们在某个对象上调用一个方法时,会先在该对象上进行查找,如果没找到则会进入对象的原型(也就是.prototype)进行查找,如果没找到,同样的也会进入对象原型的原型进行查找,直到找到或者进入原型链的顶端Object.prototype才会停止。
当我们使用arr.toString()时,不能进行复杂数据类型的判断,因为它调用的是Array.prototype.toString,虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了Object.prototype.toString。

console.log(Object.prototype.toString.call('123'));    //[object String]
console.log(Object.prototype.toString.call(undefined));    //[object Undefined]
console.log(Object.prototype.toString.call(true));    //[object Boolean]
console.log(Object.prototype.toString.call({}));    //[object Object]
console.log(Object.prototype.toString.call([]));    //[object Array]
console.log(Object.prototype.toString.call(function(){}));    //[object Function]
console.log(Object.prototype.toString.call(null));    //[[object Null]]

备注:了解symbol见阮一峰Symbol文档

上一篇下一篇

猜你喜欢

热点阅读