5

也许这个问题很简单,但我现在无法理解。

String.prototype.self=function()
{
    return this;
}
var s="s";

alert("s".self()=="s".self()) //false;
alert(s.self()==s.self()) //false;

如果您知道原因,请告诉我为什么结果为“假”。

4

1 回答 1

8

这是因为当从原始值(例如 )访问属性时,属性访问"s"在内部强制它ToObject,并且比较失败,因为它检查了两个不同的对象引用。

例如:

String.prototype.test = function() {
  return typeof this;
}

"s".test(); // "object"

这就像比较:

new String("s") == new String("s"); // false
于 2010-07-14T03:52:22.547 回答