@Linda-chan

Linda-chan

Линда Кайе
Linda-chan

Дата рождения: 01.11.1983

Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.

https://www.lindachan.net

10 я читаю 59 меня читают
15544 постов
26273 комментариев
Linda-chan
15 May 2021

По мере возможности заменяю в своих скриптах код вида

if (document.querySelectorAll)

на код вида

if ("querySelectorAll" in document)

Всё правильно делаю?

15 May 2021

Я не зарабатываю на жабаскрипте :}

#zmjvh/3 в ответ на /2
16 May 2021

Ну как бы да, но на самом деле пофигу, потому что если там не функция, ты всё равно её не вызовешь (^  ^)

16 May 2021

Я к этому пришла, когда надо было проверить существование «свойства», и если оно существовало, то могло вернуть false.

#zmjvh/5 в ответ на /4
17 May 2021

Суть в том, что false() всё равно не поедет (^  ^)

#zmjvh/6 в ответ на /5
17 May 2021

в смысле.

> Boolean('false')
true
> doc = { "querySelectorAll": null }
{ querySelectorAll: null }
> Boolean("querySelectorAll" in doc)
true
> doc = { "querySelectorAll": false }
{ querySelectorAll: false }
> Boolean("querySelectorAll" in doc)
true
#zmjvh/8 в ответ на /7
17 May 2021

Ну. А если проверять

if (doc.querySelectorAll)

результат может быть непредсказуемым.

#zmjvh/9 в ответ на /8
17 May 2021

ну хотя бы так напиши. тоже фигня, но уже лучше, чем совсем ничего.

typeof doc.querySelectorAll === 'function'

ну и в else срать эксепшенами, про то, что за бабуйню вы мне тут сунули.

#zmjvh/10 в ответ на /9
17 May 2021

Но ведь

if ("byaka" in buka)

и так работает.

#zmjvh/11 в ответ на /10
17 May 2021

тебе потом надо эту бяку теребить, а может статься так, что теребить будет не за что

#zmjvh/12 в ответ на /11
17 May 2021
let x = { 'querySelectorAll': false };
if ('querySelectorAll' in x) {
    x.querySelectorAll('.foo');
}

Uncaught TypeError: x.querySelectorAll is not a function

Я об этом. А вообще, в данном случае if (document.querySelectorAll) достаточно, потому что либо оно есть (норм), либо его нет (ой). Если там, внезапно, false, то что-то пошло не так и ты в аду, а не браузере, хотя…

// Хотя я просто использую document.querySelectorAll() без проверки. Но у тебя фетиш на старые IE (^  ^)

Комментарий был отредактирован в 14:59:07 17.05.2021
#zmjvh/13 в ответ на /8
17 May 2021

У меня случилась ситуация, когда мне нужна не функция, а свойство, и оно у старого IE отсутствует, а в другом броузере может возвращать ноль, из-за чего проверка ломалась. Можно было бы по юзерагенту, но тут подоспела другая ситуация, когда IE8 врубал строгий режим, как положено, и свойство у него тоже было, а MSHTA всякие форсили quirks mode, и свойство улетучивалось. А юзерагент одинаковый.

#zmjvh/15 в ответ на /13
17 May 2021

Да, а если заморачиваться детектированием не только имени, но и того, что это такое, то можно дойти до попыток определить, какие там у функции параметры.

#zmjvh/17 в ответ на /13
17 May 2021

В /0 не об этом, но если в общем случае, то да.

#zmjvh/18 в ответ на /15
17 May 2021

Как не об этом? Там конкретный queryselectorAll – для примера, тем более, что написано «код вида».

#zmjvh/19 в ответ на /18
17 May 2021

«Не об этом» потому, что в случае querySelectorAll особого смысла делать это так нет.

#zmjvh/20 в ответ на /19

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.