zoukankan      html  css  js  c++  java
  • 相等比较、关系比较总结

    相等比较:

    以 x 和 y 为例
    ‘==’比较时可能会进行自动类型转换,规则如下:

    1. 若 x 与 y 有一个为NaN,则返回false(NaN != NaN)。
    2. null 、undefined不等于其它任何值,它们只等于自己或对方(null == undefined)。
    3. 若 x 或 y 为true、false,则先将它转换为数字1、0,再比较。
    4. 若两者均为对象,则比较的是引用值。
    5. 若其中之一为对象,先把对象‘拆装’转换为和对方一样的基本类型,再进行比较。("" == [ ],0 == [ ])
    6. 字符串与数字比较,先把字符串转为数字再比较,"" == 0," " == 0

    ‘===’比较时不进行类型转换,规则如下:

    1. 如果x、y类型不同,则返回false
    2. 类型相同时:
      2.1 若有一个为NaN,则返回false
      2.2 引用值不相同(引用不同一对象,即使对象看上去一样),则返回false
      2.3 值不相等(除了+0 === -0 //true),返回false
      2.3 其它比较均返回true

    注意

    1. 如果x、y中有一个为true或false,千万不要使用来比较,最好用=来比较。
    2. 如果x、y中有[ ]、""、0,尽量不要使用来比较,最好用=来比较。
    3. 最好用typeof x == 'string'; typeof操作符总是返回7个字符串之一,这里用‘==’是绝对安全的,不会发生类型转换。

    关系比较

    以比较a、b为例

    1. 比较双方先调用valueOf()或toString()方法,若结果出现了非字符串,则转换为数字进行比较
    2. 比较双方均为字符串,则按字母顺序表来比较
      如:两个一样的对象,var a = {x:2}; var b = {x:1};
      比较时先全部转换为字符串,结果都为'[object Object]',所以a>b,a<b均为false,而a>=b,a<=b均为true,但是a == b为false,因为此时应用的是'=='比较规则。
  • 相关阅读:
    XML Schema
    Magento 2 instantiate object by Factory Objects
    Magento 2 Factory Objects
    UML类图与类的关系详解
    Magento add product attribute and assign to all group
    MyISAM 和InnoDB的区别
    Finding the Right EAV Attribute Table
    Implement Trie (Prefix Tree)
    Graph Valid Tree
    Maximum Subarray III
  • 原文地址:https://www.cnblogs.com/susufufu/p/5928219.html
Copyright © 2011-2022 走看看