PunCha

导航

JavaScript 学习之 instanceOf, typeOf 运算符

JavaScript的类型,分成原生类型和对象。其中,null, undefined, boolean(true, false), number, string是原生类型,而其他的都是对象(包括数组、类、函数)。而instanceOf是一个二元操作符,左侧是一个对象,右侧是对象的类型。所以把原生类型放在左右侧都是不合适的,instanceOf会返回false。


如下的例子帮助理解:

        function test_instaceOf() {

            var num = 1;
            console.log(num instanceof Number);             // false*
            console.log(num instanceof Object);             // false*
            console.log(Number(num) instanceof Number);     // false*
            console.log(Number(num) instanceof Object);     // false*
            console.log(1 instanceof Number);               // false*
            console.log(NaN instanceof Number);             // false*
            console.log("" instanceof String);              // false*
            console.log(String("abc") instanceof String);   // false*

            console.log(new Number(num) instanceof Number);     // true
            console.log(new Number(num) instanceof Object);     // true
            console.log(new Number(1) instanceof Number);       // true
            console.log(new Number(NaN) instanceof Number);     // true
            console.log(new String("") instanceof String);      // true
            console.log(new String("abc") instanceof String);   // true

            console.log({} instanceof Object);              // true
            console.log([] instanceof Object);              // true
            console.log([] instanceof Array);               // true

            console.log(new Object(null) instanceof Object);   // true
            console.log(null instanceof Object);               // false
            console.log(undefined instanceof Object);          // false

            try {
                console.log(undefined instanceof undefined);
            } catch (e) {
                console.log("exception");                   // exception!
            }
        }
注意,只有使用了new关键字,才能把原生类型正真转换成对象(相当于wrap在对象里面),而简单的类型转换(用Number, String)是没用的。

另外, typeOf操作符,是一元操作符,可以用来检测原生类型,他接受任意类型,返回的是一个字符串(小写):

        function test_typeof() {
            console.log(typeof 1);                              // number
            console.log(typeof true);                           // boolean
            console.log(typeof "string");                       // string
            console.log(typeof new Date(2001, 1, 1));           // object
            console.log(typeof new RegExp("reg expression"));   // object
            console.log(typeof function () { });                // function
            console.log(typeof {});                             // object
            console.log(typeof []);                             // object
            console.log(typeof null);                           // object
            console.log(typeof undefined);                      // undefined
            console.log(typeof NaN);                            // number
        }



posted on 2012-11-22 16:13  PunCha  阅读(124)  评论(0编辑  收藏  举报