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判断变量类型的更多相关文章

  1. 16. js 判断变量类型,包括ES6 新类型Symbol

    相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...

  2. js判断变量类型,类型转换,

    1.typeof 操作符 主要检测基础数据类型 var a="zhangqian"; var b=true; ; var d; var e=null; var f=new Obje ...

  3. JS判断变量类型

    typeof v 只能用于识别基础类型,不能识别对象 v instanceof MyClass 判断类型 Object.prototype.toString.call(v.p) === "[ ...

  4. JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

  5. js判断变量是否为undefined

    可能很多朋友认为undefined是在js中未定义变量时才会提示的错误,其实不然undefined 是js中的一特殊的变量,我们也可以提前定义哦,下面我来介绍js undefined 用法. Java ...

  6. js 判断变量是否为空

    js 判断变量是否为空 欢迎指正,补充! /** * 判断变量是否为空, * @param {[type]} param 变量 * @return {Boolean} 为空返回true,否则返回fal ...

  7. js判断变量未定义

    js判断变量未定义 控制台输出未定义变量a会报错: 我们打印出a的数据类型是: 我们可以看到未定义变量的数据类型是 "undefined" 所以判断js变量是否未定义的方法就是 t ...

  8. JS判断浏览器类型的方法总结(IE firefox chrome opera safari)

    JS判断浏览器类型的方法总结,可判别当前客户端所使用的浏览器是ie,firefox,safari,chrome或者是opera,另外js可以精确判断到ie浏览器的版本,依然直接上代码,需要的朋友可按照 ...

  9. Javascript 判断变量类型的陷阱 与 正确的处理方式

    Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...

随机推荐

  1. 调度器Quartz的配置文件中的线程池设置

    在使用调度器Quartz来进行数据归档的时候,当我们开的定时任务很多的时候,就会出现一些定时任务不会被触发的现象,这就是线程阻塞.那到底什么叫线程阻塞呢? 线程阻塞,顾名思义就是说线程被阻塞了,没有按 ...

  2. [cf 599C] Day at the Beach

    题意:有n个数,将其分组使整个数列排序后每组中的数仍在该组中,求最多的分组数. 代码很易懂 #include <iostream> #include <algorithm> # ...

  3. 【ACM】poj_1579_Function Run Fun_201308121654

    Function Run FunTime Limit: 1000MS  Memory Limit: 10000K Total Submissions: 14940  Accepted: 7736 De ...

  4. POJ 3304 segments 线段和直线相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14178   Accepted: 4521 Descrip ...

  5. JAVA 大数据

  6. iOS:改变UITableViewCell的选中背景色

    要改变UITableViewCell选中时的背景色,需要在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtInde ...

  7. volatile非原子性的示例

    volatile非原子性的示例 package com.stono.thread2.page124; public class MyThread extends Thread { volatile p ...

  8. NoSQL数据库:Redis内存使用优化与存储

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ●String ●Hash ●List ●Set ●Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Re ...

  9. 组合数们&&错排&&容斥原理

    最近做了不少的组合数的题这里简单总结一下下 1.n,m很大p很小 且p为素数p要1e7以下的 可以接受On的时间和空间然后预处理阶乘 Lucas定理来做以下是代码 /*Hdu3037 Saving B ...

  10. JS中split使用方法和数组中元素的删除

    JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...