1、toString 方式
Object.prototype.toString.call(val) === '[object Object]'
Object.prototype.toString.call(val) === '[object Array]'
2、constructor 方式
val?.constructor === Object
val?.constructor === Array
3、Object.getPrototypeOf 方式
Object.getPrototypeOf(val) === Object.prototype
Object.getPrototypeOf(val) === Array.prototype
4、Array.isArray 方法
Array.isArray(val)
5、对于typeof 和 instanceof 并不能完全判断一个值为对象
typeof 的取值有:
"undefined"——如果这个值未定义;
"boolean"——如果这个值是布尔值;
"string"——如果这个值是字符串;
"number"——如果这个值是数值;
"object"——如果这个值是对象(包括数组)或null;
"function"——如果这个值是函数;
"symbol"——如果这个值是Symbol;
instanceof 操作符对于数组和对象都返回 true;