console.log与toString方法;

Posted 小虫虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了console.log与toString方法;相关的知识,希望对你有一定的参考价值。


Java调用system.print.out()是会调用toString方法打印
js里的console.log也是控制台打印,很多时候,我们以为也是调用toString方法,其实并不是。我们在chrom下测试
var obj={‘a‘:2};
console.log(obj);
console.log(arr.toString());{‘a‘:2}
console.log(obj.toString());[object Object]
console.log(obj+‘‘);[object Object]
以上我们是对一个对象字面量进行的打印。如果是数组呢?
var arr=[1,2];
console.log(arr);//[ 1, 2 ]
console.log(arr.toString());//1,2
console.log()//1,2

我们再看字符串的:
str = new String("hello")
console.log(str) //chrome下:String {[[PrimitiveValue]]: "hello"}
console.log(str.toString())//hello

 

这是为什么?
stackoverflow有个回答(https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object),console并不是一个标准的API,跟浏览器有关,实现细节不一致。
不过这并不影响我们的编程,console只在我们调试的时候使用,何况还有debugger可以跟完整的调试
再说回toString方法:我们参考https://github.com/jkchao/blog/issues/8
我们判断数组的用什么方法:
答案是Object.prototype.toString.call(arr);以下3种都会有问题:
Array.isArray(arr)(浏览器兼容性)
arr instanceof Array(iframe下有问题)
arr.constructor === Arrayiframe下有问题)
事实上,我们借助Object.prototype.toString.call()可以获取任何变量[[Class]]属性,[[Class]]可以理解为变量的类型标准,定义在ECMA里。方法:
function getClass (a) {
  const str = Object.prototype.toString.call(a)
  return /^\[object (.*)\]$/.exec(str)[1]
}

 【完】



以上是关于console.log与toString方法;的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript连载5-数据转换为Number与String数字解析

简介alert()与console.log()的不同

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

从toString()方法到Object.prototype.toString.call()方法

JavaScript中的alert()与console.log()的区别

如何使 Javascript“toString”隐含方法文化意识