检查该值是否为对象字面值?

ajs*_*sie 25 javascript

在迭代之前,我有一个值并想知道它是否是可迭代的对象文字.

我怎么做?

use*_*716 41

这应该为你做:

if( Object.prototype.toString.call( someObject ) === '[object Object]' ) {
    // do your iteration
}
Run Code Online (Sandbox Code Playgroud)

ECMAScript的5 8.6.2节,如果你有兴趣:

[[Class]]内部属性的值由此规范为每种内置对象定义.主机对象的[[Class]]内部属性的值可以是除"Arguments","Array","Boolean","Date","Error","Function","JSON"之一之外的任何String值. ,"数学","数字","对象","RegExp"和"字符串".内部使用[[Class]]内部属性的值来区分不同类型的对象.请注意,除了通过Object.prototype.toString之外,此规范不提供程序访问该值的任何方法(参见15.2.4.2).

  • 如果它被覆盖了; 应该开枪!任何原型结构都可以覆盖它的方法,如果你不能依赖它们,那么它们将毫无用处. (6认同)
  • 这不再保证在ES6中工作,因为对象可以更改其Symbol.toStringTag属性的值,该属性用于生成Object.prototype.toString的返回值.请参阅以下注释:http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring这看起来像检查现在是否可迭代的方法是查看它是否是Symbol.iterator属性是定义的 (4认同)

dce*_*ari 7

你也可以这样做:

    if (someObject.constructor == Object) {
        // do your thing
    }
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息

  • 如果someObject为null,则它没有构造函数,因此会抛出TypeError.你真的想要上面的第一个答案. (2认同)