一、typeof关键字
JavaScript中有一个typeof关键字,用于判断变量的类型,其中参数可以是数字、字符串、布尔、对象、函数等。如果要判断一个值是否为数组或对象,可以使用typeof关键字。
let myArr = [1, 2, 3]; let myObject = {name: "Tom", age: 18}; console.log(typeof myArr); // 输出结果为: "object" console.log(typeof myObject); // 输出结果为: "object"
以上代码可以看出,使用typeof关键字可以判断变量的类型,但是对于数组和对象都会输出"object",并不能准确地判断该值是数组还是对象。
二、instanceof关键字
JavaScript中有另一个instanceof关键字,它可以判断一个对象是否为某个类的实例,比如Array、Object、Function等。因为数组和对象均是对象类型,所以可以通过instanceof关键字来判断一个值是否是数组。
let myArr = [1, 2, 3]; console.log(myArr instanceof Array); // 输出结果为: true
以上代码中使用instanceof关键字可以判断一个值是否为Array类型,而对于对象类型,无法通过instanceof关键字来进行判断。
三、constructor关键字
JavaScript中每个对象都有一个constructor属性,该属性指向创建该对象的构造函数,可以通过该属性来判断一个值是哪个构造函数创建的。
let myArr = [1, 2, 3]; let myObject = {name: "Tom", age: 18}; console.log(myArr.constructor === Array); // 输出结果为: true console.log(myObject.constructor === Object); // 输出结果为: true
以上代码中使用constructor关键字可以判断一个值是哪个构造函数创建的。对于数组和对象都可以使用这种方法来进行判断。
四、Array.isArray方法
JavaScript中还有一个Array.isArray()方法,可以判断一个值是否为数组类型。
let myArr = [1, 2, 3]; let myObject = {name: "Tom", age: 18}; console.log(Array.isArray(myArr)); // 输出结果为: true console.log(Array.isArray(myObject)); // 输出结果为: false
以上代码中使用Array.isArray方法可以准确判断一个值是否为数组类型,对于对象类型则无法判断。
五、Object.prototype.toString方法
所有的对象都有一个toString方法,但是该方法没有对对象进行分类处理,而是返回"[object Object]"。因此,可以通过这个方法来判断一个值是否为数组类型。
let myArr = [1, 2, 3]; let myObject = {name: "Tom", age: 18}; console.log(Object.prototype.toString.call(myArr) === "[object Array]"); // 输出结果为: true console.log(Object.prototype.toString.call(myObject) === "[object Array]"); // 输出结果为: false
以上代码中使用Object.prototype.toString方法可以判断一个值是否为数组类型,当返回"[object Array]"时即为数组类型,否则为其他类型。