我需要检查一个变量是否是一个纯粹的对象实例。例如:一个HTMLElement是instanceof对象。但是我真的需要检查一下是否是只有一个对象,比如{a: true, b: false}
是。它不能验证阵列。检查是否是一个对象
注意:如果更好,我可以使用Chrome的更新功能。
我需要检查一个变量是否是一个纯粹的对象实例。例如:一个HTMLElement是instanceof对象。但是我真的需要检查一下是否是只有一个对象,比如{a: true, b: false}
是。它不能验证阵列。检查是否是一个对象
注意:如果更好,我可以使用Chrome的更新功能。
检查构造函数。 Seems to work in all browsers
if (a.constructor === Object)
// Good for arrays
([]).constructor === Object => false
// Good for HTMLElements
document.body.constructor === Object => false
感谢所有回复......但这对我来说是完美和快速的。谢谢! – 2013-02-27 02:56:52
构造函数属性可以被设置,所以很容易被欺骗:'var a = []; a.constructor = Object; o.constructor ===对象; // true' – RobG 2013-02-27 03:13:04
@RobG当然,有很多事情可以用JS射击自己。你也可以欺骗你建议的对象.__ proto__',但我想这实际上会使对象成为一个东西? – 2013-02-27 03:15:01
var proto = Object.getPrototypeOf(obj);
var protoproto = Object.getPrototypeOf(proto);
if (proto === Object.prototype && protoproto === null) {
//plain object
}
如果您要创建一个null
原型对象,你可以摆脱protoproto
的,只是比较proto
到Object.prototype
或null
。
这样做的危险是,它不能防止通过Object.prototype
本身,可能导致Object.prototype
意外延期。
略短,更安全的是这样的:
var proto = Object.getPrototypeOf(obj);
if (proto && Object.getPrototypeOf(proto) === null) {
// plain object
}
*旁注:*分钟浏览器版本要求:Firefox 3.5,Chrome 5,IE 9.请参阅:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getPrototypeOf – Raptor 2013-02-27 02:46:40
你为什么要这么做? – hugomg 2013-02-27 02:41:03
你真的想看看对象是主机还是本地对象吗? HTMLElement不一定是内置Object对象的实例。元素是宿主对象,因此不需要遵循任何特定的继承模式(并且一些浏览器不实现任何,也不将它们实现为对象的实例)。 – RobG 2013-02-27 02:44:30
查看http://api.jquery.com/jQuery.isPlainObject/中jquery的源代码http://code.jquery.com/jquery-1.9.1.js然后关闭这个问题,直到你失明 – 2013-02-27 02:47:08