博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
console.log、toString方法与js判断变量类型
阅读量:5858 次
发布时间:2019-06-19

本文共 1216 字,大约阅读时间需要 4 分钟。

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,2console.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]}

 【完】

 

转载于:https://www.cnblogs.com/xiaochongchong/p/7941424.html

你可能感兴趣的文章
iOS开发之常用的那些工具类和方法
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
linix下用keepalived搭建高可用myqsl-ha
查看>>
我的友情链接
查看>>
hexo博客解决不蒜子统计无法显示问题
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
java ShutdownHook介绍与使用
查看>>
在Deferred框架中轻松实现Decal
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
[置顶] 深入探析Java线程锁机制
查看>>
ORACLE 日期函数[转载]
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
关闭SQL Server 2012智能感知代码提示功能
查看>>
Unity3D实践系列11, 组件的添加和访问
查看>>
Centos7.4别名设置提高工作效率
查看>>
.Net 中枚举AppDomains
查看>>