回答
这应该为你做它:
if(Object.prototype.toString.call(someObject) === '[object Object]') {
// do your iteration
}
从的ECMAScript 5 8.6.2节如果你有兴趣:
的[[类]]内部属性的值由本规范针对每种内置对象定义。主对象的[[Class]]内部属性的值可以是除“Arguments”,“Array”,“Boolean”,“Date”,“Error”,“Function”,“JSON”之外的任何字符串值。 ,“数学”,“数字”,“对象”,“RegExp”和“字符串”。 [[Class]]内部属性的值用于内部区分不同类型的对象。请注意,除了通过Object.prototype.toString(见15.2.4.2)外,本规范没有提供任何方法让程序访问该值。
这不再保证在ES6中工作,因为对象可以更改其Symbol.toStringTag属性的值,该属性用于生成Object.prototype.toString的返回值。请参阅http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring上的注释它看起来像检查某些东西现在可迭代的方式是查看它是否为Symbol.iterator属性被定义 – Ethan 2015-03-18 09:48:32
`Object.prototype.toString`可以被覆盖;因此,不安全。 – 2015-05-12 21:11:40
如果它被覆盖;该开发应该被枪杀!任何原型结构都可能会覆盖它的方法,而如果你不能依赖它们,那么它就没用了。 – 2015-08-05 02:01:32
这个工作对我来说:
function isObject(o) {
try {
return ((typeof o == "object") && (o !== null) && (o.length === undefined));
} catch (err) {
return false;
}
}
我觉得这样的功能应是原生的,就像Array.isArray
:
Object.isObject = function(obj) {
return obj && obj.constructor === this || false;
};
这一个不会进行函数调用或字符串比较,也不会引用全局对象(如Object
),所以它应该很快。尽管如此,我认为这不会用于性能密集型任务,但无论如何。
我并不完全相信这个名字......也许像Object.isLiteral
会更好。
虽然它可能会导致主机对象出现问题,但我没有准备好测试。
奇怪的是,我为取决于如何的toString()被调用一个子类对象看到对的toString()不同的值:
Object.prototype.toString.call(aThing) “[对象的对象]”
aThing.toString() “ZmPopupMenu”
导致假阳性,所以我改成了更喜欢对象的toString():
var str = someObject.toString ? someObject.toString() : Object.prototype.toString.call(someObject);
return str === '[object Object]';
好了,你不需要自己检查一切,或写自己的代码,当有好的库,如Lodash和Underscore。
_.isPlainObject({'a': 12});
查看本页面:
在Lodash,你可以很容易地通过isPlainObject功能,比如检查https://lodash.com/docs#isPlainObject
碰碰古老的线程,但它仍然显示在搜索和人甚至引用它作为一个新的类似的重复 - 仍然是这里最顶级的答案是远从正确(抱歉的人,没有得罪)。
要检查是否变量是以下应该使用的对象:
if (typeof variable === 'object') {
// do something
}
阵列也是对象,所以这会为阵列是真实的太。 此外 - null
也是一个有效的对象,因此上述将在null
也返回true。 个人的时候,确实需要检查,如果预期的变量是我一直用这个乏味重复公式“可行”对象:
if (variable && typeof variable === `object`) {
// do something
}
最后但并非最不重要:)请请请,请你帮个忙和唐不要使用任何库来处理这么简单的事情。 Javascript是一种快速发展的语言,今天比昨天多得多,速度如此之快,以至于大多数图书馆的速度还不够快。除此之外,正在从事规范工作的人都做得很好,大多数本地API都是干净的,正确的,与其他语言完美兼容。
假设你有一些testvar
,并且想知道它是否是一个对象,但不是数组或null(它们都是Object类型)。你可以做以下
testVar instanceof Object && !Array.isArray(testVar) && testVar !== null
小要点,没有真正优雅,但有效的
function _isObj(_obj){
return (typeof _obj === "object" && JSON.stringify(_obj).indexOf("{") == 0);
}
小例子
function _isObj(_obj){
return (typeof _obj === "object" && JSON.stringify(_obj).indexOf("{") == 0);
}
var p = document.createElement("p");
p.textContent = "undefined : " + _isObj(undefined);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "null : " + _isObj(null);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "boolean : " + _isObj(true);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "function : " + _isObj(function(){});
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "array : " + _isObj([]);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "string : " + _isObj("{}");
document.body.appendChild(p);
document.body.appendChild(p);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "number : " + _isObj(1);
document.body.appendChild(p);
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "object : " + _isObj({});
document.body.appendChild(p);
p = document.createElement("p");
p.textContent = "another object : " + _isObj(p);
document.body.appendChild(p);
希望这有助于
- 1. jQuery检查值是否在对象中
- 2. 检查对象属性值是否为
- 3. 检查对象值是否等于字符串值
- 4. 检查对象字面量是否是“对象”
- 5. 对象字面值是否返回新创建的对象?
- 6. 检查是否有键值中的对象都是假的
- 7. 检查值是否为数字
- 8. 检查字段值是否存在?
- 9. 检查是否有空值
- 10. 检查值是否存在
- 11. 检查Html.ValidationSummary()是否有值
- 12. 是否为lambda值对象?
- 13. 该函数是否应该(“isEmpty”)检查对象是否没有参数?
- 14. 我该如何确定'this'是指对象字面值内的对象字面值?
- 15. laravel检查是否对象是
- 16. 检查是否是一个对象
- 17. 检查变量是否是PDO对象?
- 18. Lua检查数值/值是否为
- 19. 我该如何检查一个Hashtable值是否都是0?
- 20. AngularJs - 检查数组对象中是否存在值
- 21. 如何检查在JavaScript中的对象中是否存在值
- 22. 检查对象数组中的键的值是否相同 - Lodash
- 23. PHP:检查对象是否包含数组中的值
- 24. 检查JSON对象中是否存在值
- 25. 如何检查JSON对象键是否具有一定的值
- 26. 使用Javascript检查JSON对象是否包含值
- 27. 如何检查Json对象是否填充了所有值
- 28. Javascript - 检查对象是否为空或空键值
- 29. 休眠,检查对象是否存在,空值
- 30. 的Javascript检查对象是否具有一定的属性值
请定义“可迭代”。 – Bergi 2015-12-05 17:31:44