2 строчка че за херня?
а вообще Hoshinokoe правильный метод показал. потому что так obj.key мы делаем обращение к обьекту и спрашиваем у него key и он сам решает что ответить. А остальными способами мы не спрашивая обьект проверяем его внутреннее состояние, что иногда противоречит сути обьектов (инкапсуляции) КЭП. Иными словами получать знчаение которое дежит по ключу надо именно через аксессоры. а потом уже првоерять удовлетворяет тебя это значение или нет.
Но я написал которая определяет можно ли достучаться до конца цепочки и получить значение отличное от (неопределенного) undefined , функция возвращает true или false.
function has( context, patch ) {
var keys = patch.split( '.' );
for ( var i = 0; i < keys.length; i++ ) {
try {
var value = context[keys[i]];
} catch ( e ) {
return false
}
if ( value !== undefined )context = value;
else return false;
}
return true;
}
а вот монада get которая возвращает то что на конце цепочки, если не может до туда достучаться возвращает undefined
function get( context, patch ) {
var keys = patch.split( '.' );
for ( var i = 0; i < keys.length; i++ ) {
try {
var value = context[keys[i]];
} catch ( e ) {
return
}
if ( value !== undefined )context = value;
else return;
}
return context;
}
get
var obj = {a:{b:{c:{d:11}}}};
var value = get( obj, 'a.b.c.d' );
alert( value ); // 11