zoukankan      html  css  js  c++  java
  • 类型转换的判定方式

    对于“==”,我们肯定不陌生,但是背后的判定机制我们可能不是很熟悉,我现在先举一些例子,最后再总结一下大概的方法:

      

    null == undefined  // true
    
     1 == true //
         
     NaN == NaN //false
     
     '123' == 123 //true Number('123') == 123
     
      '' == 0 // true
     
      '123' == {valueOf: function(){return '123'}} // true
     
      '123' == {valueOf: function(){return 123}} // true
     
      '123' == {toString: function(){return '123'}} // true
     
      123 == {valueOf: function(){return {}}} //false
    
      123 == {toString:function(){return 123},valueOf: function(){return {}}}  //true;
     
      123 == {toString:function(){return 'abc'},valueOf: function(){return 123}}  //true;

    123 == {toString:function(){return '123'},valueOf: function(){return {}}} //true;

      综上来看,

      1,NaN与任何值都不相等

      2,其中一个数是boolean,则将boolean转化为数字,true为1,false为0

      3,其中一个为字符串,若另一个数为数值,则将字符串(Number(str))转化为数字;

      4,其中一个为对象,另外一个为基本类型值,

        1)调用对象的valueOf方法,若valueOf返回一个基本类型值,则比较这个基本类型的值与字符串是否相等,相等

      则返回true,不相等返回false。不会再执行toString方法进行判断。

        2)调用对象的valueOf方法,若valueOf返回一个非基本类型值(对象,函数),则在执行toString方法,与返回的基本类型值

      在进行比较。

      5,对象与对象比较,判断是不是同时指向同一个对象。

      6,null和undefined不参与转换,但是null == undefined。

  • 相关阅读:
    Ubuntu16.04.1 安装Nginx
    Ubuntu16.04.1 安装Redis-Cluster
    SeekBar的简单使用
    Async异步处理
    SQLite
    Shareprefrence
    android中的主线程
    Fragment的简单使用
    ArrayAdapter的使用
    用Intent传递对数
  • 原文地址:https://www.cnblogs.com/accordion/p/4109845.html
Copyright © 2011-2022 走看看