【管子先生的Node之旅·1】JavaScript基础复习(一)

类型

JavaScript 类型可以简单的分类两组:基本类型和复杂类型。访问基本类型,访问的是值,而访问复杂类型,访问的是对值的引用。

    //基本类型
    var a = 5;
    var b = a;
    b = 6;
    a; //=>5
    b; //=>6

    //复杂类型
    var a = ['hello', 'world!'];
    var b = a;
    b[0] = 'bey';
    a[0]; //=>bey
    b[0]; //=>bey

上述复杂类型的例子,ab 包含了对值的相同引用。因此,当通过b修改数组的第一个元素时,a 相应的值也改变了,也就是说 a[0] === b[0]

类型的判断

要在 JavaScript 中准确无误的判断变量的类型绝非易事。下面我们就通过几个例子看看。

    //创建一个字符串
    var a = 'hello';
    var b = new String('world!');
    a + b; //=>hello world!

对a和b进行 typeofinstanceof 操作

    typeof a == typeof b; //=>false
    a instanceof String; //=>true
    b instanceof String; //=>false

结果很意外,难道 b 不是字符串吗?答案是这两个家伙都是货真价实的字符串。

    a.substr == b.substr; //=>true

并且使用 == 判断时相等,而使用 === 判断时结果并不相同。

    a == b; //=>true
    a === b; //=>false

考虑到在类型定义会有差异性,建议在定义类型的时候避免 new ,使用直观定义(列如: var a = [ ];)。

注:条件表达式中有一些值会被判断为 false:null、undefined 、' '还有0。

下面我们再来看看另一种情况:

    //定义一些变量
    var a = null;
    var b = [];
    var c = {};

我们继续对定义的变量进行进行 typeofinstanceof 操作

    typeof a == typeof b; //=>true
    typeof b == typeof c; //=>true
    a instanceof Object; //=>true
    b instanceof Object; //=>true
    c instanceof Object; //=>true

这个时候就不能直接通过对类型来判断,这时要通过查看对象内部 [[class]] 值:

    Object.prototype.toString.call(b) == Object.prototype.toString.call(c); //=>false
    Object.prototype.toString.call(b) == '[object Array]'; //=ture

instanceof Array 这种方法只适用于与数组初始化在相同的上下文中才有效。

你可能感兴趣的:(【管子先生的Node之旅·1】JavaScript基础复习(一))