console.log、toString方法与js判断变量类型
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方法与js判断变量类型的更多相关文章
- 16. js 判断变量类型,包括ES6 新类型Symbol
相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...
- js判断变量类型,类型转换,
1.typeof 操作符 主要检测基础数据类型 var a="zhangqian"; var b=true; ; var d; var e=null; var f=new Obje ...
- JS判断变量类型
typeof v 只能用于识别基础类型,不能识别对象 v instanceof MyClass 判断类型 Object.prototype.toString.call(v.p) === "[ ...
- JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- js判断变量是否为undefined
可能很多朋友认为undefined是在js中未定义变量时才会提示的错误,其实不然undefined 是js中的一特殊的变量,我们也可以提前定义哦,下面我来介绍js undefined 用法. Java ...
- js 判断变量是否为空
js 判断变量是否为空 欢迎指正,补充! /** * 判断变量是否为空, * @param {[type]} param 变量 * @return {Boolean} 为空返回true,否则返回fal ...
- js判断变量未定义
js判断变量未定义 控制台输出未定义变量a会报错: 我们打印出a的数据类型是: 我们可以看到未定义变量的数据类型是 "undefined" 所以判断js变量是否未定义的方法就是 t ...
- JS判断浏览器类型的方法总结(IE firefox chrome opera safari)
JS判断浏览器类型的方法总结,可判别当前客户端所使用的浏览器是ie,firefox,safari,chrome或者是opera,另外js可以精确判断到ie浏览器的版本,依然直接上代码,需要的朋友可按照 ...
- Javascript 判断变量类型的陷阱 与 正确的处理方式
Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...
随机推荐
- Python 6 数字和布尔值及字符串的基本功能
数据类型:查看变量数据类型type(变量) 或者 print(type(变量)) 整数int:就是不带小数的自然数字,也叫整型.在2.X版本中还分为长整型和整形.但是在3.X版本中统一称为整数或整 ...
- TSP服务商
1.何为TSP? TSP([1] Service Provider),在Telematics产业链居于核心地位,上接汽车.车载设备制造商.网络运营商,下接内容提供商.谁掌控了TSP,谁就能掌握Tele ...
- HBase(0.96)新的Java API操作
package test; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.ap ...
- windows与linux下配置ant
转自:http://www.cnblogs.com/wuxinrui/archive/2012/01/06/2314392.html 1.下载:到ANT官方网站http://ant.apache.or ...
- DELPHI RTTI实现非可视的功能插件
思路:通过数据字典定义BPL包名,然后定义BPL包里面的类名,然后定义类里面的方法名,最后定义方法的参数值. 可实现动态加载BPL,调用哪个BPL的哪个类的哪个方法并给该方法赋给指定的参数值,如果是函 ...
- Hard模式题目
先过一下Hard模式的题目吧. # Title Editorial Acceptance Difficulty Frequency . 65 Valid Number 12.6% Ha ...
- Oracle推断值为非数字
select * from product_info t where t.contract_detailid is not null and length(translate(t.contract_d ...
- VBS+bat后强大的功能
set wshshell=createobject("script.shell") wshshell.run "cmd.exe /c [dos命令]",0,tr ...
- Wikioi 1081 线段树成段更新单点查询
线段树练习飘逸的写法,自从自己改成这样的写法之后,线段树就没再练过,如今最终练得上了. 由于这里查询仅仅是查询了叶子结点,所以pushUp函数就用不上了,只是我没去掉之前是3ms.去掉之后反而变成4m ...
- C# winform窗体在桌面右下角显示(任务栏上方)
问题描述: 有一个主窗口程序,需要给该程序添加一个通知子窗口.子窗口的位置为右下角. 解决方法: 在子窗口frmPopMsg的代码文件中添加如下代码: public frmPopMsg() { Ini ...