console.log、toString方法与js判断变量类型
2017-12-01 12:19
766 查看
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] }【完】
相关文章推荐
- js数据类型判断 toString方法的底层分析
- js判断变量类型的方法
- 用js判断变量是何种类型的方法
- JS判断变量类型的方法总结
- 判断一个变量是数组Array类型的方法
- JavaScript基于自定义函数判断变量类型的实现方法
- 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
- JS判断浏览器类型方法
- php判断变量类型常用方法
- js基本数据类型及判断方法
- js 判断各种数据类型的简单方法(推荐)
- 从js对象类型的判断,附call与apply方法的区别
- js中定义一个变量并判断其是否为空的方法
- 【Python】判断一个变量的数据类型的两种方法
- js/jquery判断浏览器类型的方法小结
- js中变量类型判断
- js/jquery判断浏览器类型的方法小结
- JavaScript中判断变量是数组、函数或是对象类型的方法
- JS、JQ判断变量是否为数组的方法(Array)
- js中精确判断对象类型--关于typeof 和Object.prototype.toString方法的区别