返回
别再闷头硬学JS类型判断,用好它让你事半功倍!
前端
2023-10-06 20:32:13
七种JS类型判断方法的详解
1. typeof 操作符
typeof 操作符是最简单、最常用的类型判断方法。它返回一个字符串,表示变量的数据类型。例如:
typeof 1; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object"
typeof Symbol(); // "symbol"
typeof function() {}; // "function"
typeof []; // "object"
typeof {}; // "object"
2. instanceof 操作符
instanceof 操作符用于判断一个对象是否属于某个类的实例。例如:
1 instanceof Number; // false
"hello" instanceof String; // true
true instanceof Boolean; // false
undefined instanceof Undefined; // false
null instanceof Null; // false
Symbol() instanceof Symbol; // true
function() {} instanceof Function; // true
[] instanceof Array; // true
{} instanceof Object; // true
3. constructor 属性
constructor 属性返回一个对象的构造函数。例如:
1.constructor === Number; // true
"hello".constructor === String; // true
true.constructor === Boolean; // true
undefined.constructor === Undefined; // false
null.constructor === Null; // false
Symbol().constructor === Symbol; // true
function() {}.constructor === Function; // true
[].constructor === Array; // true
{}.constructor === Object; // true
4. Object.prototype.toString 方法
Object.prototype.toString 方法返回一个字符串,表示对象的类型。例如:
Object.prototype.toString.call(1); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Symbol()); // "[object Symbol]"
Object.prototype.toString.call(function() {}); // "[object Function]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"
5. Object.prototype.toString.apply 方法
Object.prototype.toString.apply 方法与 Object.prototype.toString 方法类似,但它可以将任何值作为第一个参数。例如:
Object.prototype.toString.apply(1); // "[object Number]"
Object.prototype.toString.apply("hello"); // "[object String]"
Object.prototype.toString.apply(true); // "[object Boolean]"
Object.prototype.toString.apply(undefined); // "[object Undefined]"
Object.prototype.toString.apply(null); // "[object Null]"
Object.prototype.toString.apply(Symbol()); // "[object Symbol]"
Object.prototype.toString.apply(function() {}); // "[object Function]"
Object.prototype.toString.apply([]); // "[object Array]"
Object.prototype.toString.apply({}); // "[object Object]"
6. 判断变量的类型的方法推荐
- typeof是最常用也最简单的一种方法;
- instanceof 是判定引用类型是否是指定类型对象的最佳选择。对于Object类型,通常会搭配typeof进行使用,先确认是否是对象,再通过instanceof来判断具体类型;
- constructor通常用于判定对象所属的类,不建议直接判断具体类型;
- Object.prototype.toString.call可用于判断所有的类型,但在判断Object类型时往往得不到我们想要的结果。通过Object.prototype.toString.apply结合typeof能解决这一问题;
- 法6适合需要使用正则的情况。
7. 需要注意的点
- 不要只用typeof来判断Object的类型,因为它会返回“object”结果,这样不能明确知道是哪种Object类型;
- 不要使用==或===来比较不同类型的变量,它会得到不准确的结果;
- 使用instanceof来判断引用类型时,要注意判断的顺序,因为有些类继承自其他类,如果判断顺序不对,可能会得到错误的结果;
- 注意Object.prototype.toString.call()和Object.prototype.toString.apply()的区别,因为它们返回的字符串格式不同;
- 根据不同的场景选择合适的方法来判断类型。