JavaScript identity operator on strings
javascript
Solution
It's because `""` is a string primitive, but when you call `.IsEmpty()` it's implicitly converted to a `String` object.
You'd need to call .toString() on it:
String.prototype.IsEmpty = function() {
return (this.toString() === "");
}
Interestingly this is browser-specific - `typeof this` is `string` in Chrome.
As @pst points out, if you were to convert the other way and compare `this === new String("");` it still wouldn't work, as they're different instances.
Problem
I'm trying to write a prototype for determining if a string is empty. It's really just playing with JS and prototype, nothing important. Here's my code: ``` String.prototype.IsEmpty = function() { return (this === ""); } ``` Notice I used the `===` identity comparison instead of `==` equality. When I run the function with the above definition: ``` "".IsEmpty(); // false ``` If I chagne the definition to use `==` as: ``` String.prototype.IsEmpty = function() { return (this == ""); } ``` The new def'n will do: ``` "".IsEmpty(); // true ``` I don't understand why `===` doesn't work since `""` is identical to `""`