Цитата:
var array = [1];
var arrayLike = {0:1, length:1};
var fakeArrayLike = {length:1, height:2};
var window = window;
var fn = function() {};
var fake1 = {foo: NaN, length: 1};
var fake2 = {'12.24': 1, length: 1};
var fake3 = '';
var fake4 = '1';
console.log(isArrayLike(document.getElementsByTagName('body')) === true, 1);
console.log(isArrayLike(document.querySelectorAll('body')) === true, 2);
console.log(isArrayLike(array) === true, 3);
console.log(isArrayLike(arrayLike) === true, 4);
console.log(isArrayLike(fakeArrayLike) === false, 5);
console.log(isArrayLike(window) === false, 6);
console.log(isArrayLike(fn) === false, 7);
console.log(isArrayLike(fake1) === false, 8);
console.log(isArrayLike(fake2) === false, 9);
console.log(isArrayLike(fake3) === false, 10);
console.log(isArrayLike(fake4) === false, 11);
function isArrayLike(item) {
if( typeof item === 'string' ) return false;
if( item == null ) return false;
if( item === window ) return false;
if( !('length' in item) ) return false;
if( typeof item === 'function' ) return false;
if( item.length === 0 ) return true;
return ( item.length - 1 ) in item
}
--- Erolast, не всегда есть возможность патчить) |
nerv_, а я вот думал на счет стринга но почему то оставил его, посмотрев на ангуляр, хотя нет в нем смысла
nerv_, ух ты, даже likeArray(document.createTextNode('выыв')) выдает false поставлю себе в юишку эту функцию ка я) |
Цитата:
Немного сократил. На последнем тесте врет. С этими не знаю как правильно. |
вообще likeArray предполагается что должна использоваться внутри toArray который по сути строку должен оборачивать в ['строка']
function toArray(item){
if( likeArray(item) ) return [].slice.call(item);
return [item]
}
так что строка не должна быть liteArray по уму чтобы можно было делать так eventNames = toArray(eventsNames) и если был массив строк то он и останется а если была строка то обернется в массив в котором будет в первой ячейке |
Цитата:
*** По поводу likeArray, то у меня юзается так: https://github.com/kobezzza/Collecti.../types.js#L134 Надо пожалуй добавить проверку для window. |
Цитата:
Ты в курсе, что все подобные проверки идут лесом ибо Цитата:
А еще зачем это, если есть старая добрая утиная типизация?) Т.е. эту функцию можно сократить. Впрочем, это поверхностное суждение, я не знаю как у тебя там все устроено) |
Цитата:
Цитата:
Я планировал вернуться к разработке новой версии Collection вскорем, проведу ревью кода, но думаю, что здесь так надо было. |
Цитата:
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 13:07. |