2014-01-15 3 views
-1

Этот вопрос является продолжением Can't understand the behavior of deleting vars in JavaScriptПочему hasOwnProperty возвращает истину

Это происходит на Google Chrome: - Случай 1:

var x = 5; 
window.x === x // true. x, as it seems, is a property of window 
window.hasOwnProperty('x'); // true 
delete x; // false 
delete window.x; // false; 

СЛУЧАЙ 2:

window.x = 5; 
delete window.x; // true 

СЛУЧАЙ 3:

window.x = 5; 
delete x; // true 

Если CASE 2 и 3 работают (удаляет x), то почему CASE1 не делает то же самое? Я знаю, что delete удаляет только любое свойство, а в CASE 1 x - это переменная, которая не должна быть свойством. Но функция window.hasOwnProperty возвращает true.

В светлячок для case1: hasOwnProperty возвращает истину, а также удаление х возвращает истину ...

+0

Первый случай будет «истинным», только если 'x' объявлен как' x = 5; ', без' var' – thefourtheye

+0

Невозможно воспроизвести с использованием FF 26.0, FF возвращает 'true' во всех экземплярах. – Zeta

+0

, но когда мы объявляем его как var x, то также это свойство объекта window..so он должен удалить –

ответ

0

Позвольте мне использовать answer:

Вы создаете переменную в глобальной области по вар, а не свойство окно объект. Этот var просто связан с window.x. И тогда вы сравните window.x === x он вернет true.

Также object.hasOwnProperty(x) проверить, что объект имеет x в собственность (через object.x) не x от цепи прототипов.

+1

Поскольку на этот вопрос уже ответил ваш первоначальный ответ, это дубликат исходного вопроса и должен быть помечен как таковой. – Zeta

+0

Я полностью согласен с тобой .. Я тоже думаю, что это способ ... но я думаю, что это больше зависит от браузера ... как будто я просто понял, что .. firefox думает по-другому .. –

+0

@BhaskarMelkani Как это у вас есть? те же самые комментарии, что и предыдущий вопрос, но вы не знали об этом вопросе? Вы что-то скопировали? – Barmar

Смежные вопросы