Javascript: прототип числа - PullRequest
3 голосов
/ 08 марта 2010
var x= 1;  
Number.prototype.test = function () { return this };  
x.test() === x.test() // false  

Почему тест === возвращает false?

Ответы [ 3 ]

3 голосов
/ 08 марта 2010

Поскольку this будет объектом Number, а не исходным значением примитива, а сравнение двух одинаково созданных объектов всегда будет возвращать false:

{"test":"Hello"} === {"test":"Hello"} // false

// Check the typeof your vars
var x= 1;  
Number.prototype.test = function () { return this };  
x.test() === x.test() // false 
alert("x is a "+typeof(x)+", x.test() is an "+typeof(x.test()));

Если вы ищете исправление, наберите this на число

var x= 1;  
Number.prototype.test = function () { return +this };  
x.test() === x.test() // TRUE!
alert("x is a "+typeof(x)+", x.test() is also a "+typeof(x.test()));
1 голос
/ 08 марта 2010

Каждый раз, когда вы звоните .test(), создается новый экземпляр Number, это очень ожидаемое поведение, каждое решение для бокса работает таким образом. Вы можете попробовать то же самое в C # и Java и получите абсолютно одинаковый результат. (Ну, у Java есть пул объектов Integer для небольших чисел, поэтому вы не получите абсолютно одинаковых результатов)

0 голосов
/ 08 марта 2010

Пока мы проверяем оператор ===, он будет проверять тот же тип объекта.

Здесь проблема может быть из-за создания другого объекта.

...