javascript数据类型及其判断

基本数据类型

Number String Boolean Null Undefined Symbol

引用数据类型

Object Array Function Date

判断数据类型

typeof

instanceof

Object.prototype.toString

constructor

使用 typeof 判断复杂数据类型

使用 instanceof判断有原型链的引用型数据类型,但是需确保原型链未被修改过

使用 Object.prototype.toString 可以准确的判断变量的类型(万能方法)

使用 constructor 可以查看目标构造函数,也可以进行数据类型判断

使用 typeof 判断复杂数据类型

const foo = ( ) => 1

typeof foo         // "function"

const foo = { }

typeof foo         // "object"

const foo = [ ]

typeof foo // "object"

const foo = new Date

typeof foo         // "object"

const foo = Symbol("foo")

typeof foo         // "symbol"

var obj = {

        name : "zhenghao"

};

console.log(typeof obj)

typeof 可以准确判断除null以外的基本数据类型,null会被判断为object.

typeof 也可以判断function,array,symbol引用型数据类型

使用 instanceof判断有原型链的引用型数据类型,但是需确保原型链未被修改过

var obj = { };

obj instanceof Object         // "true"

instanceof 原理模拟

//L表示做表达式,R表示右表达式

const instanceMock = (L,R) => {

        if ( typeof L !== 'Object' ){

        return false

        }

        while ( true ){

                if ( L===null ){

                        // 已经遍历到顶端

                        return false

                }

                if ( R.prototype === L._proto_ ){

                        return true

                }

                L = L._proto_

        }

}

使用 Object.prototype.toString 可以准确的判断变量的类型(万能方法)

function foo ( ){

}

Object.prototype.toString.call(foo)         // [ object Function ]

console.log(Object.prototype.toString.call(foo))         // [ object Function ]

使用 constructor 可以查看目标构造函数,也可以进行数据类型判断

当一个函数F被创建时,JS引擎会为其添加prototype原型,然后在原型上添加一个constructor属性,并让其指向F的引用。也就是说

F.prototype.constructor === F // true

当执行 var f = new F() 这时候F被当做构造函数使用,这时候F原型上的constructor就会被转移到了实例对象f上

f.constructor === F // true

null和undefined是无效的对象,是不存在constructor这个属性的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值