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 `""`

Original source