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)以及当前要存储的真实数据。类型标签存储在每个单元的低位中,共有五种数据类型
000 | object | 存储的数据指向一个对象 |
1 | int | 存储的数据是一个31位的有符号整数 |
010 | double | 存储的数据指向一个双精度的浮点数 |
100 | string | 存储的数据指向一个字符串 |
110 | boolean | 存储的数据是布尔值 |
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的指向,指向该类型的对象