Совместимость оператора Javascript IN

Может кто подскажет, с какой версии ECMA доступен оператор IN и какие браузеры (версии) его поддерживают?

Объяснение:

Оператор IN можно использовать следующим образом:

var myObject = {
    Firstname: 'Foo',
    Lastname: 'Bar'
};

if('Lastname' in myObject){
    // Lastname is an attribute of myObject
}

person jAndy    schedule 27.05.2010    source источник


Ответы (2)


Он определен в 3-е издание ECMAScript. Он доступен в IE 5.5+ и во всех используемых версиях Firefox, Chrome, Opera и Safari.

Вы можете безопасно использовать его, зная, что он будет работать.

Вам следует проявить осторожность при использовании его для проверки поддержки событий. Все реализации, кроме более старых версий Firefox, поддерживают "eventname" in element в качестве теста на события DOM.

"onclick" in document.body; // -> false in old Fx, true in others
document.body.setAttribute("onclick", "");
typeof(document.body.onclick == "function"); // -> true in Fx
person Andy E    schedule 27.05.2010
comment
Это только в IE 5.5+; IE 5.0 был «проблемным браузером» для in, хотя, очевидно, теперь это уже давно исчезло. - person bobince; 27.05.2010
comment
FWIW Я не видел этого во 2-м издании @ ecma- international.org/publications/standards/Ecma-262-arch.htm - person Alex K.; 27.05.2010
comment
@Nick: он определенно присутствует в версии 3.0, хотя IE не поддерживал его на момент публикации. ECMAScript 3.1 был названием разработки для того, что стало пятым изданием. - person bobince; 27.05.2010
comment
@bobince - Вы действительно правы, у меня было 2-е издание, а не 3-е при сравнении, и я не смог найти раздел 11.8.7, он находится в версии 3.0. - person Nick Craver; 27.05.2010
comment
@bobince: когда я ставил IE5, я использовал документацию MSDN для оператор in, в котором указано, что он был в JScript версии 1, реализованной в IE 3.0. Я поставил 5 как более безопасную ставку, потому что IE3 широко не используется. Я полагаю, что документы неправильные? Они были в прошлом один или два раза :-) - person Andy E; 27.05.2010
comment
@Andy: ты прав, этот документ действительно ерунда! У меня здесь IE5 / Win98, и in определенно не работает. - person bobince; 27.05.2010
comment
@bobince: я так и думал, не в первый раз меня ввел в заблуждение MSDN :-) - person Andy E; 27.05.2010

Согласно MDC, он реализован в JavaScript 1.4.

Согласно Википедии:

  • Netscape Navigator 6.0
  • Firefox 1.0+
  • IE 5.5+
  • Opera 6.0+
  • Safari 3.0+
  • Chrome 1.0+

Думаю, ты в порядке :)

person Skilldrick    schedule 27.05.2010
comment
потому что я могу сделать undefined = 'defined!'; раньше в коде, что очевидно полезно. - person Eric; 27.05.2010
comment
На самом деле, вы должны были поставить это как другой ответ, поскольку теперь наши комментарии не имеют смысла. - person Eric; 27.05.2010
comment
@Skilldrick, вы можете зачеркнуть текст в ответе с помощью тега <s>, очевидно, meta.stackexchange.com/questions/63768/ - person Adrien Be; 14.10.2014
comment
примечание: я сомневаюсь, что Википедия является надежным источником поддержки функций Javascript в версиях браузера. - person Adrien Be; 15.10.2014