变量类型判断
2023-11-08 14:35:01变量类型判断
- typeof
常用于基础数据类型判断:
typeof 123 === "number"; // true
typeof true === "boolean"; // true
typeof "123" === "string"; // true
typeof undefined === "undefined"; // true
但是要注意:
typeof null === "object" // true
对于复杂数据类型判断,除了function之外,其他都返回object
const fn = () => {}
typeof fn === "function"; // true
typeof new Date() === "object"; // true
- instanceof
instanceof主要用于区分引用数据类型
instanceof运算符:用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
比如:
const obj = {};
obj instanceof Object; // true
返回ture原因:
首先我们可以列出实例对象obj的原型链:
obj.__proto__ === Object.prototype;
Object.prototype.__proto__ === null;
从实例对象obj的原型链中可以看到Object.prototype是在obj对象的原型链上,所以obj instanceof Object返回true。
- constructor
构造函数
当解析函数的时候(还未执行),此时会在函数的原型对象上添加一个constructor方法,指向当前的函数。
例如:
function F() {};
const f = new F();
f.constructor === F; // true
注意:只有对象才能调用constructor,其他基础数据类型不能使用
- Object.prototype.toString.call
Object.prototype.toString.call({}) === "[object Object]"; // true
Object.prototype.toString.call([]) === "[object Array]"; // true
Object.prototype.toString.call(123) === "[object Number]"; // true
Object.prototype.toString.call(() => {}) === "[object Function]"; // true
Object.prototype.toString.call(null) === "[object Null]"; // true
Object.prototype.toString.call(undefined) === "[object Undefined]"; // true
Object.prototype.toString.call(true) === "[object Boolean]"; // true