Gab*_*vay 0 javascript performance object
我想确保某些变量始终是一个Object(我知道它aValue可以是一个Object或undefined或null).我有以下选择:
var mustBeObject = aValue || {};
Run Code Online (Sandbox Code Playgroud)
要么
var mustBeObject = Object(aValue);
Run Code Online (Sandbox Code Playgroud)
哪两个更有效率,为什么?
如果你想保证这mustBeObject是一个对象而不管是什么aValue,但如果aValue是一个对象,那么你想要使用值aValue,那么你将需要更多的代码:
var mustBeObject = (aValue && typeof aValue === "object") ? aValue : {};
Run Code Online (Sandbox Code Playgroud)
或者,如果您想确保它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 : {};
Run Code Online (Sandbox Code Playgroud)
编写这些文件以确保它mustBeObject是一个JS对象,无论aValue最初是什么.如果你从你的代码中知道它aValue只是undefined一个有效的对象,那么你的第一个选择:
var mustBeObject = aValue || {};
Run Code Online (Sandbox Code Playgroud)
肯定会比我上面的任何选项更快,但是你的选项只能防止虚假值aValue,而不是其他类型的非JSy对象的非假值,所以既然你说你需要"确保某些确定变量总是一个对象",我认为你需要的测试多于你所拥有的测试.
一个jsperf测试表明,该OR版本更快.感谢@Wander Nauta
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |