zoukankan      html  css  js  c++  java
  • 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]
    }
    

     【完】



  • 相关阅读:
    JS的Document属性和方法小结
    机器学习笔记——最小二乘法
    c语言中printf()函数中的参数计算顺序
    机器学习笔记——拉格朗日乘子法和KKT条件
    Linux bash笔记
    java.util.ConcurrentModificationException的解决办法
    浅谈对java中传参问题的理解
    机器学习笔记——t分布知识点总结
    机器学习笔记——测试集和验证集的区别
    java中对HashMap遍历的方式
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/7941424.html
Copyright © 2011-2022 走看看