After testing out instasnceof I found that it will return true if the argument is an array or an object literal.
function test(options){
if(options instanceof Object){alert('yes')}//this will alert for both arrays and object literals
}
test({x:11})// alerts
test([11])// alerts as well but I do not want it to
Is there a way to test if the argument “options” is an object literal?
P.S. I am creating a module that will allow the user to access its configuration options, and I want to test if the argument is only an object literal or not?
No, because it makes no sense. You can test whether it’s an object, but how it was created (via a literal in the call to your function, via a literal elsewhere, through
new Object, by deserializing a JSON string, …) is not information that’s maintained.Correct. Arrays in JavaScript are objects (and not really arrays).
If you want to test that an object is a plain old object, you can do this:
But there’s really no reason to do that. It’s not your problem. As long as what they pass you has the properties you expect, don’t try to limit the object further.
Why? If the user wants to use an object that hasn’t been declared as a literal right there and then, why would you care? If they want to use an object that they’ve created via a different constructor function (e.g., rather than just a plain object), again, why would you care?