js中的instanceof

typeof

用来判断基本数据类型

console.log(typeof 1)        //number
console.log(typeof '111')    //string
console.log(typeof true)      //boolean
console.log(typeof  null)       //object
console.log(typeof undefined)  // undefined
console.log(typeof Symbol())     //symbol
console.log(typeof BigInt('3'))  //bigint
console.log(typeof  [])          //object
console.log(typeof  {})          //object

在Javascript第一版中,所有值都存在32位的单元中,每个单元包含一个小的类型标签(1-3bits)以及当前要存储的真实数据。类型标签存储在每个单元的低位中,共有五种数据类型

000object存储的数据指向一个对象
1int存储的数据是一个31位的有符号整数
010double存储的数据指向一个双精度的浮点数
100string存储的数据指向一个字符串
110boolean存储的数据是布尔值

null的值是机器码NULL指针(null指针的值全是0),null的类型标签也是000,和Object类型标签一样,会被判定为Object

 instanceof

简介

instanceof运算符用来判断一个构造函数的prototype属性所指向的对象,是否存在另外一个要检测对象的原型链上

function Person(){}

var p1=new Person();  // Person的原型属性function Person()

Person.prototype={};  //Person的原型属性为{}  Person的原型属性改变了


//p1的prototype属性所指向的对象是否在Person的原型链上
console.log(p1 instanceof Person); //false
function Person(){}

Person.prototype={};  //Person -> Person.prototype即{}

var p1=new Person();//p1 -> p1.__proto__ 即{}

//p1的prototype属性所指向的对象是否在Person的原型链上
console.log(p1 instanceof Person);  //true

类型判断

只能判断引用数据类型

console.log(1  instanceof  Number)        //false
console.log('111'  instanceof String)    //false
console.log( 2n instanceof BigInt)      //false

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

constructor 

console.log([].constructor)  //ƒ Array() { [native code] }
console.log({}.constructor)  //ƒ Object() { [native code] }

constructor在继承时会报错

function A(){}
function B(){}

A.prototype=new B()

let obj=new  A()

console.log(obj.constructor)  //ƒ B() {}

Object.prototype.toString.call() 

console.log(a.call(1))      //[object Number]
console.log(a.call(null))   //[object Null]
console.log(a.call(Symbol()))  //[object Symbol]
console.log(a.call([]))        //[object Array]
console.log(a.call({}))         //[object Object]

每个对象都有一个toString()方法,当该对象被表示一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString()返回[object   type],其中type是对象类型。

call方法改变了this的指向,指向该类型的对象 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值