• JS中的各种类型转换规则(转)


    JS中的类型转换非常恶心,大家都懂的,不过该学还是要学。

    今天看犀牛书看到了转换规则,总结出来。

    X转字符串、数字、布尔值

    X表示各种类型的值,直接上图:

    转数字转字符串转布尔值
    undefined NaN “undefined” false
    null 0 “null” false
    true 1 “true”  
    false 0 “false”  
    0   “0” false
    -0   “0” false
    NaN   “NaN” false
    Infinity   “Infinity” true
    -Infinity   ”-Infinity” true
    1(非零)   “1” true
    {}(任意对象) 见下文 见下文 true
    [](任意数组) 0 ”” true
    [9](包含一个数字元素) 9 “9” true
    [”a”](其他数组) NaN 使用.join()方法 true
    function(){}(任意函数) NaN 见下文 true

    两个基本方法

    上文中有三个“见下文”,就是见这里了。这三个地方也就是JS转换最麻烦的地方。

    首先来看两个基本的转换方法:

    toString()  // 返回对象的字符串表示形式
    
    valueOf()  // 返回对象的数字表示形式

    乍一看很简单是吧,别着急,关键是JS并不会像你想的那样单纯地调用这些方法。

    对象转字符串

    具体步骤如下:

    • 如果有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成字符串并返回。字面量转字符串见上表。
    • 如果没有toString()方法或者没有返回字面量,并且有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成字符串返回。
    • 如果以上两步都没有成功,就抛出一个类型错误异常。

    对象转数字

    其实就是把对象转字符串的前两步调换了一下,然后把返回结果都转换成数字。

    具体步骤如下:

    • 如果有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成数字返回。
    • 如果没有valueOf()方法或者没有返回字面量,并且有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成数字并返回。字面量转数字见上表。
    • 如果以上两步都没有成功,就抛出一个类型错误异常。

    对象转字面量

    有些特殊的运算符并不会把对象转换成数字或者字符串,而是转换成字面量。

    对象转字面量的具体步骤和对象转数字的具体步骤一样,先调用valueOf再调用toString,区别是,对象转字面量并不会在返回之前把结果转换成字符串或者数字,也就是说没有上面步骤中的粗体部分。

    那么什么运算符会这么SB呢:

    • +
    • ==
    • !=
    • <,>以及所有关系运算符

    处理日期类

    别着急,JS还有更SB的一种情况,就是处理Date类型。

    如果“+”和“==”遇到的是Date类型对象,那就会采用去除粗体部分的对象转字符串步骤,也就是说先调用toString再调用valueOf,并且不会对结果进行类型转换。

    总结

    普通转换参见表格,+、==、!=、<>和关系运算符的文艺转换参见对象转字面量,+、==遇见Date的2B转换参见处理日期类。

  • 相关阅读:
    特性类
    WebGL中的第三个小程序(着色器)
    C#紧耦合的例子
    特性
    python两个目录匹配,粘贴图片
    Leetcode 53
    逻辑回归-1.原理
    多项式回归-4.模型正则化
    python 线程
    python 进程
  • 原文地址:https://www.cnblogs.com/lmy-ms/p/4121564.html
Copyright © 2020-2023  润新知