zoukankan      html  css  js  c++  java
  • 一个有趣的js隐式转换的问题

    一个有趣的js隐式转换的问题

    在chrome的控制台中打印一下表达式

    [] + {} //结果为 [object object]
    

    然后调整顺序打印

    {} + [] //结果为 0
    

    然后将两个表达式组合一下

    {} + [] === [] + {} //true
    

    wtf???

    原理解释如下:
    一般的类型转换的时候, 面对 + , 首先调用 valueOf[1]进行转换, 如果转换的结果不是
    基本类型, 那么采用 toString() 方法进行转换, 所以

    []+{} //结果Wie [object + object]
    

    但是 {} 在js或者很多语言中是代码块的区别标志, 所以在首位的话, 会被认为是 blank block 而
    忽略, 所以 +[], 即 +"", 最终的结果会是 0

    {}+[]// 0
    

    而最终的

    {}+[] === [] + {}//true 是因为 chrome 默认在这种判断的外边增加了 括号, 所以两个字符
    //"[object object]" === "[object object]" 自然就是 true 了.
    

    [1] Date除外


    1. 1 ↩︎

  • 相关阅读:
    大端小端
    浅谈协程
    boost总结之any
    boost总结之variant
    STL总结之functor
    zabbix设置多个收件人
    zabbix设置发送消息的时间
    zabbix利用微信报警
    Windos无法验证文件数组签名
    zabbix基础安装
  • 原文地址:https://www.cnblogs.com/asdfq/p/9419102.html
Copyright © 2011-2022 走看看