作为一名前端开发者,JavaScript无疑是我们最重要的那把利器。现在发展的MVVM框架、Node.js等相关技术,也都是建立在JavaScript原生之上。所以,学习、理解好JavaScript原生真的是太重要了。我现在只是一个小白啊,但要打起精神了,重新捋一遍JavaScript!

这篇文章主要是记录一下对数据类型的判断——typeof、instanceof以及===。

先说下js的数据类型:

    string 
    number
    boolean
    null 
    undefined
    Object(array function) // 暂不说ES6新增的symbol
(1 typeof)然后我直接以代码的形式解释
var a // 5.undefined
console.log(a, typeof a, typeof a === 'undefined', a === undefined) 
// (打印输出为:)undefined 'undefined' true true

(typeof能判断出大多数的数据类型)

这里可以看到,undefined可以用typeof来判断,同时注意一点,type返回的值都是小写的数据类型的 字符串 表达

   a = 'yuchen' // 1.string
    console.log(typeof a, typeof a === 'string')  
        // string true 判断string
        a = 4  // 2.number
    console.log(typeof a, typeof a === 'number', a === Number) 
        // number true false 判断number
    a = true  // 3.boolean
    console.log(typeof a, typeof a === 'boolean')
        // boolean true  判断boolean 
    a = null  // 4. null
    console.log(typeof a,  typeof a === 'object', a === null)
        // object true true
        // 注:'typeof null返回是object,所以无法用typeof判断null与object',
    a = {name: 'yuchen'} // 6.object
    console.log(typeof a, 'object对象')
        // object 判断object
    a = function () {        // 7.function
        return '嗯 黎海霞'
    }
    console.log(typeof a, 'function返回')
        // function
        // 注:typeof可以判断出function
    a = [1,2,3]
    console.log(typeof a, )
        // object
        // 注:'typeof array返回也是object,无法判断'

(讲完之后文末再总结)en ~ 还是先在这里总结一下吧:

typeof(注:typeof返回的值都是小写的数据类型的字符串表达如:'object而不是Object') 其实就是判断参数是什么类型的实例,就一个参数,例:typeof A 

其返回值(只能是这6个):string/number/boolean/undefined/object/function
能判断 -string/number/boolean/undefined/object/function 

不能判断 -null与object array与object(null、array返回的都是object,所以无法对它们进行判断)

(2 instanceof)

是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 当 A 的 __proto__ 指向 B 的 prototype 时,就认为 A 就是 B 的实例。 instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。 

 JS 中万物皆对象的思想(function array 也是object) :

判断对象的具体类型 (是对象 数组 还是函数)返回的值是大写的--Object、Array、Function

var b1 = {
        b2: [1, 'abc', console.log],
        b3: function () {
            console.log('b3')
            return function () {
                return 'yuchen'
            }
        },
        b4: 11
    }
    
    console.log(b1 instanceof Object, )
        // true
    console.log(b1.b2 instanceof Array, b1.b2 instanceof Object)
        // true true(既然是数组,那当然也是对象啊——数组是一种特殊的对象)
    console.log(b1.b3 instanceof Function, b1.b3 instanceof Object)
         // true true(函数也是一种特殊的对象)

所以,你可以用instanceof来判断这个对象到底是哪种,是函数还是数组。

(3 ===)

全等很简单,它只能用来判断null 和 undefined(我猜想是因为它们两个都只有一个值的原因)返回一个布尔值,由此可判定。

var love
console.log(typeof love, love ===undefined)
// undefined true
love = null
console.log(typeof love, love === null)
// object true

总结一下:

1) typeof

返回的值都是小写的数据类型的字符串表达,如'object而不是Object'

能判断出多数:-string/number/boolean/undefined/object/function;

不能判断:-null与object array与object(null、array返回的都是object,所以无法对它们进行判断)。

2) instanceof 

判断对象的具体类型 (是对象 数组 还是函数)返回的值是大写的--Object、Array、Function

JS 中万物皆对象的思想

3) ===

只能用来判断null 和 undefined(因为它们两个都只有一个值)

扩展一下:

  // Question: 如何判断一个变量是否为数组?,
            // 不要用 typeof 判断
            typeof []; // object
            
            // 这是es3的规定,但是这必须假定只有一个全局执行环境
            [] instanceof Array; // true
            
            // ES5的标准
            Array.isArray([]); // true
    
    // Answer: 通过 instanceof 判断,或者 isArray 来判断。

结论: (注:数组不能通过typeof来判断,可以通过instanceof、isArray来判断。

完毕:谢谢观看,小白一只,如有错误或想法请说明哦 ~~


JuliusDeng
12 声望2 粉丝

« 上一篇
构造函数小记
下一篇 »
undefined与null