JavaScript 判断变量的类型的方法

13、JavaScript 判断变量的类型的方法

1、typeof 运算符:

可以返回一个字符串,表示变量的数据类型。例如:

let num = 123;
console.log(typeof num); // "number"

let str = "Hello";
console.log(typeof str); // "string"
2、instanceof 运算符:

可以用来判断一个变量是否是一个特定类型的实例。例如:

let arr = [1, 2, 3];
console.log(arr instanceof Array); // true

let date = new Date();
console.log(date instanceof Date); // true
3、Object.prototype.toString.call() 方法:

可以返回一个字符串,表示变量的数据类型。例如:

let num = 123;
console.log(Object.prototype.toString.call(num)); // "[object Number]"

let str = "Hello";
console.log(Object.prototype.toString.call(str)); // "[object String]"
4、constructor 属性:

每个 JavaScript 对象都有一个 constructor 属性,表示该对象的构造函数。例如:

let arr = [1, 2, 3];
console.log(arr.constructor === Array); // true

let date = new Date();
console.log(date.constructor === Date); // true

以上是 JavaScript 中判断变量类型的几种方法,使用不同的场景需要使用不同的方法。

手写instanceof()
function myInstanceof(left, right) {
    // 获取对象的原型
    let proto = Object.getPrototypeOf(left)
    // 获取构造函数的 prototype 对象
    let prototype = right.prototype;
    // 判断构造函数的 prototype 对象是否在对象的原型链上
    while (true) {
        if (!proto) return false;
        if (proto === prototype) return true;
        // 如果没有找到,就继续从其原型上找,Object.getPrototypeOf方法用来获取指定对象的原型
        proto = Object.getPrototypeOf(proto);
    }
}
//测试1
let obj = new Object()
console.log(myInstanceof(obj, Object));  //true

//测试2
function Father() { }
function Son(){}
Son.prototype = new Father()
let obj2 = new Son()
console.log(myInstanceof(obj2,Son));  //true
console.log(myInstanceof(obj2,Father)); //true

应用场景的区别

  1. typeof 运算符:typeof 运算符是最常用的判断变量类型的方法,它可以识别出数字、字符串、布尔值、对象、函数、未定义等数据类型。但是它有一个缺点,就是对于数组和 null 对象,它都返回 “object”,因此不能很好地识别出数组和 null 类型。

  2. instanceof 运算符:instanceof 运算符是一个比较特殊的方法,它可以判断一个变量是否是某个构造函数的实例,因此能够很好地识别出数组、日期、正则表达式等类型。

  3. Object.prototype.toString.call() 方法:Object.prototype.toString.call() 方法是一个很强大的方法,它可以识别出所有的数据类型,并且返回类型的字符串标识,如 “[object Number]”、“[object String]”、“[object Array]” 等。因此使用该方法可以很好地判断出所有数据类型。

  4. constructor 属性:每个 JavaScript 对象都有一个 constructor 属性,表示该对象的构造函数。可以通过判断该属性的值是否等于某个构造函数,来判断该对象的类型。但是这种方法有一个缺点,就是对于基本数据类型(如数字、字符串),它们是没有 constructor 属性的,因此不能很好地识别出基本数据类型。

    在实际开发中,我们可以根据需要选择不同的方法来判断变量的类型,如果需要识别所有的数据类型,则可以使用 Object.prototype.toString.call() 方法;如果只需要识别基本数据类型,则可以使用 typeof 运算符;如果需要识别特定的数据类型,则可以使用 instanceof 运算符或 constructor 属性。

你可能感兴趣的:(前端学习笔记,javascript,前端,开发语言)