zoukankan      html  css  js  c++  java
  • 你不知道的 JavaScript 系列中( 30 ) - 比较中的强制转换类型

    var a = [ 42 ];
    var b = [ "43" ];
    a < b; // true
    b < a; // false
    比较双方首先调用 ToPrimitive,如果结果出现非字符串,就根据 ToNumber 规则将双方强 制类型转换为数字来进行比较
    var a = [ "42" ];
    var b = [ "043" ];
    a < b; // false
    如果比较双方都是字符串,则按字母顺序来进行比较:
    var a = [ 4, 2 ];
    var b = [ 0, 4, 3 ];
    a < b; // false
    a转换为"4, 2",b转换为"0, 4, 3",同样是按字母顺序进行比较。
    var a = { b: 42 };
    var b = { b: 43 };
    a < b; // false
    a == b; // false
    a > b; // false
    a <= b; // true
    a >= b; // true

    如果a < b和a == b结果为false,为什么a <= b和a >= b的结果会是true呢? 因为根据规范a <= b被处理为b < a,然后将结果反转。因为b < a的结果是false,所以a <= b的结果是true。

    这可能与我们设想的大相径庭,即 <= 应该是“小于或者等于”。实际上 JavaScript 中 <= 是
    “不大于”的意思(即!(a > b),处理为!(b < a))。同理a >= b处理为b <= a。
    为了保证安全,应该对关系比较中的值进行显式强制类型转换:
    var a = [ 42 ];
    var b = "043";
    a < b; // false -- 字符串比较!
    Number( a ) < Number( b ); // true -- 数字比较!
  • 相关阅读:
    Java知识汇总第二天
    jvm学习笔记
    java知识汇总的第一天
    全链路压测流量模型
    FunTester测试框架Redis性能测试实践
    FunTester抄代码之路
    Jira API的踩坑记
    把工作讲给家人听
    颇具年代感的《JMeter中文操作手册》
    FunTester框架Redis压测预备
  • 原文地址:https://www.cnblogs.com/wzndkj/p/14052400.html
Copyright © 2011-2022 走看看