typeof
注意点:
- 对象、数组、null 都返回 object
- NaN为number类型
- prompt接收的参数为String类型
console.log(typeof ''); // string
console.log(typeof 123); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof {}); // object
console.log(typeof []); // object
console.log(typeof null); // object
console.log(typeof function () {}); // function
console.log(typeof NaN); // number
let num = prompt("请输入一个数字");
console.log(`${num}: ${typeof num}`); // 100: string
constructor
原理
- 实例对象使用的属性或方法,先看自己(构造函数)中有没有,有就用构造函数的,
没有就继续访问自己的原型对象,有就用自己的原型对象的,
没有就继续访问object原型对象,有就用object原型对象的,没有就报错 - 实例对象先在自己中找constructor属性,没有就去原型对象中找,找到了原型对象中的constructor,原型对象中的constructor指向构造函数,构造函数中有一个属性name,name保存的是构造函数的名字,就是new XXX() => name = XXX
let arr = new Array();
console.log(typeof arr); // object
console.log(arr.constructor.name); // Array
function Person(myName, myAge) {
this.name = myName;
this.age = myAge;
this.say = function () {
console.log('Hello World');
}
}
let p1 = new Person('小明', 18);
console.log(typeof p1); // object
console.log(p1.constructor.name); // Person
instanceof
原理
- instanceof用于判断“对象”是否是指定构造函数的实例
- 只要构造函数的原型对象出现在实例对象的原型链中都会返回true
let arr = new Array();
console.log(arr instanceof Array); // true
Array.isArray() (ES5)
let arr = new Array();
console.log(Array.isArray(arr)); // true