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。

  • 相关阅读:
    Java反射获取对象VO的属性值(通过Getter方法)
    HTML的级联Select
    ORACLE 新增记录 & 更新记录
    ORACLE 仿照原表建表语法
    ActiveMQ反序列化漏洞(CVE-2015-5254)复现
    滥用DNSAdmins权限进行Active Directory提权
    Weblogic CVE-2018-3191远程代码命令执行漏洞复现
    Libssh认证绕过CVE-2018-10933漏洞复现
    Linux kernel(CVE-2018-17182)提权漏洞复现
    时间延迟盲注详解
  • 原文地址:https://www.cnblogs.com/accordion/p/4109845.html
Copyright © 2011-2022 走看看