作家
登录

JavaScript运算符规则与隐式类型转换详解

作者: 来源: 2017-09-06 09:51:17 阅读 我要评论

'Date' ) ? 'String' : 'Number'
  •   if(preferredType==='Number'){ 
  •     if(APIs.isPrimitive(obj.valueOf())) { return obj.valueOf()}; 
  •     if(APIs.isPrimitive(obj.toString())) { return obj.toString()}; 
  •   }else
  •     if(APIs.isPrimitive(obj.toString())) { return obj.toString()}; 
  •     if(APIs.isPrimitive(obj.valueOf())) { return obj.valueOf()}; 
  •   } 
  •   throw new TypeError('TypeError'); 
  • 为了更好地舆解其工作道理,我们可以用 JavaScript 进内行单地实现:

    我们可以简单覆写某个对象的 valueOf 办法,即可以发明其运算结不雅产生了变更:

    1. let obj = { 
    2.     valueOf:() => { 
    3.         return 0; 
    4.     } 
    5.  
    6. obj + 1 // 1 

    如不雅我们强迫将某个对象的 valueOf 与 toString 办法都覆写为返回值为对象的办法,则会直接抛出异常。

    1. obj = { 
    2.         valueOf: function () { 
    3.             console.log("valueOf"); 
    4.             return {}; // not a primitive 
    5.         }, 
    6.         toString: function () { 
    7.             console.log("toString"); 
    8.             return {}; // not a primitive 
    9.         } 
    10.     } 
    11.  
    12. obj + 1 
    13. // error 
    14. Uncaught TypeError: Cannot convert object to primitive value 
    15.     at <anonymous>:1:5 

    值得一提的是对于数值类型的 valueOf() 函数的调用结不雅仍为数组,是以数组类型的隐式类型转换结不蚜?鲋符串。而在 ES6 中惹人 Symbol 类型之后,JavaScript 会优先调用对象的 [Symbol.toPrimitive] 办法来将该对象转化为原始类型,那么办法的调用次序就变为了:

    • 当 obj[Symbol.toPrimitive](preferredType) 办法存在时,优先调用该办法;
    • 如不雅 preferredType 参数为 String,则依次测验测验 obj.toString() 与 obj.valueOf() ;
    • 如不雅 preferredType 参数为 Number 或者默认值,则依次测验测验 obj.valueOf() 与 obj.toString() 。

    而 [Symbol.toPrimitive] 办法的签名为:

    1. obj[Symbol.toPrimitive] = function(hint) { 
    2.   // return

        推荐阅读

        CIO修炼之道第4讲!张明文谈六项能力打造IT数字神经网络

      《CIO修炼之道》第 4 讲制造业企业的核心竞争力表如今产品和办事上,展如今客户面前的竞争力就是&ldquo;性价比高,交货快!&rdquo;,这&ldquo;一高、一快&rdquo;是互相接洽关系的。比如,采取提前备货、扩大年夜产能等>>>详细阅读


      本文标题:JavaScript运算符规则与隐式类型转换详解

      地址:http://www.17bianji.com/lsqh/37165.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)