We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
js中我们常用的判断类型方法typeof在对象和数组上都返回'object',所以要使用其他方案来判断
var a = []; var b = {}; a.length; // 0 b.length; // undefined
然而,因为对象的属性可以被修改,所以这种方法并不可靠;但是因为let等会计作用域的保证,所以这个方法是开发中比较简单常用的方法;
var a = []; var b = {}; a instanceof Array; // true b instanceof Array; // false
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object的原型链上。 换句话来说,就是检测参数a的原型链上是否存在Array的的原型; 理解这个方法可以了解下mdn上关于Object.getProtoTypeOf的解释
JavaScript中的 Object 是构造函数(创建对象的包装器)。 一般用法是: var obj = new Object(); 所以: Object.getPrototypeOf( Object ); // ƒ () { [native code] } Object.getPrototypeOf( Function ); // ƒ () { [native code] } Object.getPrototypeOf( Object ) === Function.prototype; // true Object.getPrototypeOf( Object )是把Object这一构造函数看作对象, 返回的当然是函数对象的原型,也就是 Function.prototype。 正确的方法是,Object.prototype是构造出来的对象的原型。 var obj = new Object(); Object.prototype === Object.getPrototypeOf( obj ); // true Object.prototype === Object.getPrototypeOf( {} ); // true
var a = []; var b = {}; b.toString(); // "[object Object]" Object.prototype.toString.call(a); // "[object Array]" Object.prototype.toString.call(b); // "[object Object]"
那么问题来了,为什么要使用Object.prototype.toString来帮助判断,不直接用toString?其实是为了防止自定义的toString方法导致返回的结果被修改。 每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。
var a = []; var b = {}; Array.isArray(a); // true Array.isArray(b); // false
Array是ES6推出的方法,在可以使用ES6的环境下,提供了简单好用的array判断方法!
严格判定JavaScript对象是否为数组
The text was updated successfully, but these errors were encountered:
No branches or pull requests
js中我们常用的判断类型方法typeof在对象和数组上都返回'object',所以要使用其他方案来判断
第一种方法,判断对象的长度
然而,因为对象的属性可以被修改,所以这种方法并不可靠;但是因为let等会计作用域的保证,所以这个方法是开发中比较简单常用的方法;
第二种方法,instanceof
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object的原型链上。
换句话来说,就是检测参数a的原型链上是否存在Array的的原型;
理解这个方法可以了解下mdn上关于Object.getProtoTypeOf的解释
第三种方法,Object.prototype.toString.call()
那么问题来了,为什么要使用Object.prototype.toString来帮助判断,不直接用toString?其实是为了防止自定义的toString方法导致返回的结果被修改。
每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。
第四种方法,Array.isArray()
Array是ES6推出的方法,在可以使用ES6的环境下,提供了简单好用的array判断方法!
严格判定JavaScript对象是否为数组
The text was updated successfully, but these errors were encountered: