美文网首页
JavaScript中的类型转换

JavaScript中的类型转换

作者: EWL | 来源:发表于2017-10-10 11:53 被阅读0次

    ECMAScript6 中新加入了一种类型(Symbol),暂且搁置,之后再说,今天主要说一说ES5 中的几种数据类型

    • Number
    • String
    • Boolean
    • Object
    • undefined
    • Null

    既然有类型,那么首先就谈一谈如何区分类型

    上代码:

    var num = 1,
        str = 'string',
        bool = false,
        a,
        b = null,
        obj = {name:'obj'},
        foo = function () {
          alert('hello world');
        };
    

    分别使用typeof来检测他们的类型,会返回什么呢?

    image.png

    首先有这么几点疑问,javascript中不是函数都是对象吗,也没有说函数是单独的一种类型啊,为什么会返回function呢?其次,为什么null是object呢?
    在不同的浏览器中,对于function的typeof操作返回的值不尽相同,Safari5之前版本以及Chrome版本 61.0.3163.100中为function,其他浏览器均返回object。
    并且null被认为是一个空的对象引用,似乎也没什么不对。
    但是我要区分function和object的时候怎么办?这时候就可以使用Instanceof

    image.png

    类型转换

    尤其是涉及到对象的类型转换,很烦这个东西
    举个栗子:

    [] == ![];//true
    

    夭寿了啊,怎么这样?但仔细想一想,[]是啥,是个空数组,数组是典型的引用类型,引用类型就涉及到了传递方式的问题,在这个问题中涉及到了强制转换和自动转换的知识点。这个问题属于强制转换,而这个转换过程正是决定返回true还是false的关键。
    使用==操作符时操作数都会被强制转换为合适的类型,基本的转换规则如下:

    • 一个操作数为布尔值,那么两个操作数就被转为数值,false -> 0 , true -> 1,之后再比较相等性
    • 一个操作数是字符串,一个是数值,先将字符串转为数值,再进行比较
    • 一个操作数是对象那个,另一个不是,那么就先调用valueOf(),返回值如果是基本类型那么就继续比较,如果不是那就调用toString()(比如第二个式子,![]进行了自动转换类型,返回的当然就不再是对象,那么一个对象一个非对象的比较就回到了我们这第三种情况, 具体的看下面)

    自动转换发生的条件:

    1. 不同类型做相互运算的时候
    2. 对非布尔值类型的数据求布尔值
    3. 对非数值类型的数据使用一元运算符

    拿上面的[] == ![]举例子,首先,!是逻辑非,对于一个对象而言,使用!就直接返回false(来自javascript高级程序设计44页)

    [] == false;好的,回到了第一条转换规则,[]转成布尔值是啥呢?可不就是false吗?先用toString()将[]转成"",那么空字符串的布尔值就一目了然了,false== false, 结束了。

    阮大神---数据类型转换

    相关文章

      网友评论

          本文标题:JavaScript中的类型转换

          本文链接:https://www.haomeiwen.com/subject/fyhvyxtx.html