我们对字符串类型的数据并不会陌生。let str = 'value'就是一个最简单的生成字符串例子。
我们还可以通过String(thing)和new String(thing)将任何类型的数据转化成字符串。注意,new String(thing)会生成一个String类型的对象将字符串包裹。
String() 和 toString() 都可以转换为字符串类型,但是toString()不可以转换null 和 undefined,因为null 和 undefined 没有自己的包装对象,不能访问对象的toString() 方法。
我们顺着原型链,obj => obj.proto => Object.prototype,可以发现,toString()方法是定义在Object的原型对象Object.prototype上的,这样Object的每个实例化对象都可以共享Object.prototype.toString()方法。
toString()的用法:
- 可以转换数字的进制(2-36进制)
var a = 10;
a.toString(2); // "1010"
a.toString(8); // "12"
a.toString(16); // "a"
- 判断数据(基础数据和引用数据)的类型
Object.prototype.toString.call(Array) // "[object Function]"
Object.proptotype.toString.call([]) // "[object Array]"
[[Class]]是一个内部属性,值为一个类型字符串,可以用来判断值的类型。 在JavaScript代码里,唯一可以访问该属性的方法就是通过 Object.prototype.toString()
[[Class]]这个内部属性是引擎内部用来判断一个对象是属于哪种类型的值。 所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]]
因为Object是所有子类的父类,所以任何类型的对象object都可以通过this绑定调用Object.prototype.toString()方法,返回该对象的字符串表示!
var obj = {a: 1};
obj.toString();//"[object Object]"
Object.prototype.toString.call(obj);//"[object Object]"