作家
登录

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

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

 a primitive value 
  •   // hint = one of "string""number""default" 
  • 我们同样可以经由过程覆写该办法来修改对象的运算表示:

    1. user = { 
    2.   name"John"
    3.   money: 1000, 
    4.  
    5.   [Symbol.toPrimitive](hint) { 
    6.     console.log(`hint: ${hint}`); 
    7.     return hint == "string" ? `{name"${this.name}"}` : this.money; 
    8.   } 
    9. }; 
    10.  
    11. // conversions demo: 
    12. console.log(user); // hint: string -> {name"John"
    13. console.log(+user); // hint: number -> 1000 
    14. console.log(user + 500); // hint: default -> 1500 

    标准的相等性操作符(== 与 !=)应用了 Abstract Equality Comparison Algorithm 来比较操作符两侧的操尴尬刁难象(x == y),该算法流程要点提取如下:

    • 如不雅 x 或 y 中有一个为 NaN,则返回 false;
    • 如不雅 x 与 y 皆为 null 或 undefined 中的一种类型,则返回 true(null == undefined // true);不然返回 false(null == 0 // false);
    • 如不雅 x,y 类型不一致,且 x,y 为 String、Number、Boolean 中的某一类型,则将 x,y 应用 toNumber 函数转化为 Number 类型再进行比较;
    • 如不雅 x,y 中有一个为 Object,则起首应用 ToPrimitive 函数将其转化为原始类型,再进行比较。

    JavaScript 为我们供给了严格比较邮攀类型转换比较两种模式,严格比较(===)只会在操作符两侧的操尴尬刁难象类型一致,并且内容一致时才会返回为 true,不然返回 false。而更为广泛应用的 == 操作符则会起首将操尴尬刁难象转化为雷同类型,再进行比较。对于 <= 等运算,则会起首转化为原始对象(Primitives),然后再进行比较。

    我们再往返想下文首提出的 [] == ![] 这个比较运算,起首 [] 为对象,则调用 ToPrimitive 函数将其转化为字符串 "" ;对于右侧的 ![] ,起首会进行显式类型转换,将其转化为 false。然后在比较运算中,会将运算符两侧的运算对象都转化为数值类型,即都转化为了 0,是以最终的比较结不雅为 true。在上文中还介绍了 null >= 0 为 true 的┞封种比较结不雅,在 ECMAScript 中还规定,如不雅 < 为 false,则 >= 为 true。

    加法运算

    对于加法运算而言,JavaScript 起首会将操作符两侧的对象转换为 Primitive 类型;然后当恰当的隐式类型转换能得出有意义的值的前提下,JavaScript 会先辈行隐式类型转换,再进交运算。譬如 value1 + value2 这个表达式,起首会调用 ToPrimitive 函数将两个操作数转化为原始类型:

    1. prim1 := ToPrimitive(value1) 
    2. prim2 := ToPrimitive(value2) 

    这老将会优先调用除了 Date 类型之外对象的 valueOf 办法,而因为数组的 valueOf 办法的返回值仍为数组类型,则会返回其字符串表示。而经由转换之后的 prim1 与 prim2 中的任一个为字符串,则会优先辈行字符串连接;不然进行加法计算。

    【编辑推荐】

    1. 测试JavaScript函数的机能
    2. 浅谈JavaScript中的接话柄现
    3. 浅谈JavaScript中的异步处理
    4. 怎么轻松进修JavaScript
    5. JavaScript高等法度榜样设计高等技能
    【义务编辑:未丽燕 TEL:(010)68476606】

      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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