所以我有一个简单的isPlainObject
方法来测试 JavaScript 对象字面量:
var isPlainObject = function (obj) {
return typeof obj === "object" && {}.toString.call(obj) === "[object Object]";
};
现在我有一个普通的对象:
var obj = {'one': 1, 'two': 2, 'three': 3};
当我通过该isPlainObject(obj)
函数运行它时,它按预期工作并返回true
. 我的问题来自向对象的原型添加属性:
obj.constructor.prototype.four = 4;
现在,当我运行它时isPlainObject(obj)
,obj
它会返回false
。typeof obj
在这两种情况下都会返回object
。在我向原型添加属性后,第二个实例中的toString
返回。[object Number]
究竟发生了什么变化obj
?这是怎么回事?
编辑:这只发生在QUnit函数调用的范围内测试时。
test("each", function() {
_.each([1, 2, 3], function(i,v) {
equal(v, i + 1, 'each iterator provided index and value from array');
});
var obj = {'one': 1, 'two': 2, 'three': 3};
console.log(_.isPlainObject(obj)); // => true
obj.constructor.prototype.four = 4;
console.log(_.isPlainObject(obj)); // => false
});
编辑:这是我在记录arguments
类似数组的对象时得到的 console.log isPlainObject
。
查看日志似乎表明该数组现在有两个参数。但长度仍为1
.