Для тестирования простых объектов используйте:
if (obj[x] !== undefined)
Если вы не знаете, какой тип объекта он использует:
if (obj.hasOwnProperty(x))
Все остальные параметры медленнее ..
Детали
Оценка производительности 100 000 000 циклов под Nodejs для 5 вариантов, предложенных другими здесь:
function hasKey1(k,o) { return (x in obj); }
function hasKey2(k,o) { return (obj[x]); }
function hasKey3(k,o) { return (obj[x] !== undefined); }
function hasKey4(k,o) { return (typeof(obj[x]) !== 'undefined'); }
function hasKey5(k,o) { return (obj.hasOwnProperty(x)); }
Оценка говорит нам, что если мы не хотим специально проверять цепочку прототипов объекта, а также сам объект, мы не должны использовать общую форму: if (X in Obj)...
Это в 2-6 раз медленнее в зависимости от случай использования
hasKey1 execution time: 4s 510.427785ms
hasKey2 execution time: 0s 904.374806ms
hasKey3 execution time: 0s 760.336193ms
hasKey4 execution time: 0s 935.19901ms
hasKey5 execution time: 2s 148.189608ms
Итог: если ваш Obj не обязательно является простым объектом и вы хотите избежать проверки цепочки прототипов объекта и убедиться, что x принадлежит непосредственно Obj, используйте 'if (obj.hasOwnProperty (x)) ...' .
В противном случае, если вы используете простой объект и не беспокоитесь о цепочке прототипов объекта, использование if (typeof(obj[x]) !== 'undefined')...
- самый безопасный и быстрый способ.
Если вы используете простой объект в качестве хеш-таблицы и никогда не делаете ничего странного, я бы использовал if (obj[x])...
, так как я нахожу его гораздо более читабельным.
Веселитесь.