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

    参考 ECMA-262 section 7

    Type Convertion

    Number String Boolean Undefined Null Object Symbol
    Number - NumberTo String 0=>false × × Boxing ×
    String StringTo Number - ""=>false × × Boxing ×
    Boolean true=>1 false=>0 'true' 、'false' - × × Boxing ×
    Undefined NaN 'undefined' false - × × ×
    Null 0 'null' false × - × ×
    Object valueOf valueOf toString true × × - ×
    Symbol × × × × × Boxing -
    • Boxing & Unboxing

      new Number(1) // Number {1}
      new String('hello') // String {"hello"}
      
      new String('hello').length // 5
      'hello'.length // 5
      
      !new String("") // false
      !"" // true
      
      // 强制类型转换
      Number('1') // 1 
      String(1) // '1'
      Boolean(1) // true
      
      Object(1) // Number {1}
      Object("hello")
      Object(true)
      Object(Symbol('x')) // 除了不能 new,其它与构造器一样
      
      Object(Symbol('x')) instanceof Symbol // true
      Object.getPrototypeOf(Object(Symbol('x'))) === Symbol.prototype // true
      
      (function(){return this}).apply(Symbol('x')) // boxing Symbol {Symbol(x)}
      
      • ToPremitive
      • toString  vs  valueOf
      1 + {} // '1[object Object]'
      1 + { valueOf(){ return 1 } } // 2
      1 + { toString(){ return 1 } } // 2
      1 + { toString(){ return '1' } } // '11'
      1 + { valueOf() { return 1 }, toString() { return '2' } } // 2
      '1' + { valueOf() { return 1 }, toString() { return '2' } } // '11'
      
      1 + { 
          [Symbol.toPrimitive](){ return 5 }, 
          valueOf(){ return 1 }, 
          toString(){ return '2' }
      }  // 6
      
      1 + { 
          [Symbol.toPrimitive](){ return {} }, 
          valueOf(){ return 1 }, 
          toString(){ return '2' }
      }  // TypeError:Cannot convert object to primitive value
      
      1 + { valueOf() { return  }, toString() { return '2' } } // '1undefined'
      1 + { valueOf() { return {} }, toString() { return '2' } } // '12'
      

      总结:

      toPrimitive 只调 toPrimitive

      没有 toPrimitive 会默认执行 toPrimitive 代码,会先调 valueOf 再调 toString

      // hint Number
      new Date().toJSON() "2020-04-25T03:16:26.552Z"
      
  • 相关阅读:
    YTU 2972: C语言习题5.24--文件操作1
    YTU 2925: 文件操作--文本文件读入
    YTU 2924: 文件操作--二进制文件读入
    PHP中$_SERVER[HTTP_REFERER]
    form控件中添加js代码,用javascript:某代码段(注意javascript之后用双引号)
    js中的location.href与location
    问题:下载页面代码? 以及php中header的用法。
    随笔
    __FILE__ $_SERVER['PHP_SELF'] $_SERVER['SCRIPT_NAME'] $_SERVER['SCRIPT_FILENAME'] 的区别
    #deebef 背景色
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13094069.html
Copyright © 2011-2022 走看看