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
        }



转载于:https://www.cnblogs.com/puncha/archive/2012/11/22/3876970.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值