Javascript Peculiarity May 30, 2013
I was trying to write a syntax parser, and everything was going just great until I came across this little tidbit. In parsing this syntax:
obj.prop1.prop2.substring(0,1)
I'd parse and evaluate obj, then find properties in it like so:
var currentContext = null;
code.split(".");
for each (token in split string){
if (currentContext == null) currentContext = evaluate(token);
else if (token in currentContext) currentContext = currentContext[token];
}
Evaluate executes code and returns objects within a context global to the method call, not the local context, which I call here, "currentContext"
But then I got an error trying to do stringProperty.substring(0,1). Can't call "IN" on a string? So I'm like, ok, let me try something else
if (token in Object.getPrototypeOf(currentContext)
And guess what... That shit don't work! Cannot call getPrototypeOf on a non-object. But it's a string?!
So I just ended up doing, if (token in String.prototype)
, just to say F YOU JAVASCRIPT!!! Otherwise I love Javascript. If you have any insight on this, PLEASE feel free to leave a comment.
I wrote up a JSFiddle for it, please link your own in the comments