我想确保某些变量始终是Object
(我知道aValue
可以是Object
或undefined
或null
)。我有以下选择:
var mustBeObject = aValue || {};
要么
var mustBeObject = Object(aValue);
两者哪个更有效?为什么?
最佳答案
如果要保证mustBeObject
是对象而不管aValue
是什么,但是如果aValue
是对象,则要使用aValue
的值,则将需要更多代码:
var mustBeObject = (aValue && typeof aValue === "object") ? aValue : {};
或者,如果要确保
aValue
甚至不是数组或其他类型的非JS对象,则需要进行进一步的测试以确保aValue
是您想要的:// make sure it's an object and not an array and not a DOM object
function isPlainObject(item) {
return (
!!item &&
typeof item === "object" &&
Object.prototype.toString.call(item) === "[object Object]" &&
!item.nodeType
);
}
var mustBeObject = isPlainObject(aValue) ? aValue : {};
编写这些内容是为了确保
mustBeObject
是JS对象,而不管最初aValue
是什么。如果您从代码中知道aValue
仅仅是undefined
或有效对象,那么您的第一个选择是:var mustBeObject = aValue || {};
肯定比我上面的任何选项都快,但是您的选项只能防止
aValue
中的假值,而不是不是JS对象的其他类型的非假值,因此,既然您说过,您需要“确保“某些变量始终是对象”,我认为您需要的不仅仅是测试。jsperf test表示
OR
版本更快。感谢@Wander Nauta关于javascript - 哪一个是效率更高的`Object(value)`或`value || {}`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23973367/