zoukankan      html  css  js  c++  java
  • 类型转换

    反过来也一样:
    var x = "42";
    var y = false;
    x == y; // false
    Type(y) 是布尔值,所以 ToNumber(y) 将 false 强制类型转换为 0,然后 "42" == 0 再变成
    42 == 0,结果为 false。
    也就是说,字符串 "42" 既不等于 true,也不等于 false。一个值怎么可以既非真值也非假
    值,这也太奇怪了吧?
    这个问题本身就是错误的,我们被自己的大脑欺骗了。
    "42" 是一个真值没错,但 "42" == true 中并没有发生布尔值的比较和强制类型转换。这里
    不是 "42" 转换为布尔值(true),而是 true 转换为 1,"42" 转换为 42。
    这里并不涉及 ToBoolean,所以 "42" 是真值还是假值与 == 本身没有关系!
    重点是我们要搞清楚 == 对不同的类型组合怎样处理。== 两边的布尔值会被强制类型转换
    为数字。
    很奇怪吧?我个人建议无论什么情况下都不要使用 == true 和 == false。
    请注意,这里说的只是 ==,=== true 和 === false 不允许强制类型转换,所以并不涉及
    ToNumber。
    例如:
    var a = "42";
    强制类型转换 | 81
    // 不要这样用,条件判断不成立:
    if (a == true) {
    // ..
    }
    // 也不要这样用,条件判断不成立:
    if (a === true) {
    // ..
    }
    // 这样的显式用法没问题:
    if (a) {
    // ..
    }
    // 这样的显式用法更好:
    if (!!a) {
    // ..
    }
    // 这样的显式用法也很好:
    if (Boolean( a )) {
    // ..
    }
    避免了 == true 和 == false(也叫作布尔值的宽松相等)之后我们就不用担心这些坑了

  • 相关阅读:
    解决sqlite3 dos下显示中文乱码
    毕业两年
    成就感
    重构html的下拉框select
    ie6 select不兼容处理(转)
    全选删除确认改进
    GridView移动行变色
    gridview固定列的宽度并且能换行
    分页控件结合分页存储过程
    网页滚动条向下拉动奇慢的原因
  • 原文地址:https://www.cnblogs.com/guidan/p/10694921.html
Copyright © 2011-2022 走看看