Anonymous
я запускал и что
Anonymous
что не понятно тебе
stay
Я вот так и не понял. Я знаю, что У Array.length есть ограничение в 2**32-1 , но я все еще не понимаю почему присвоение a[999999999] = 123 ведет себя именно так
Сергей
Ага
Anton
потому что length, по сути, отдельная сущность
Anton
там в статье написано, что As you can see, the length property does not necessarily indicate the number of defined values in the array
Paul
Это понятно. Почему тогда 10, а не 10000000000
length это просто свойство у объекта массива
Anton
и так оно и есть: если вы положите 2 элемента в массив на позиции 9 и 10, то длина массива у вас не будет равна двум
stay
Так, это понятно. Length возвращает индект последнего элемента-1
Paul
Ты пытаешься запихнуть в него элемент с индексом больше 32 бит, но он не может поменять length
Paul
Поэтому элемент с таким индексом он добавил, а length не тронул
Anonymous
var i = 999; var arr = []; arr[9] = 9; console.log(arr[9]) arr[i] = 321; => [ <9 empty items>, 9, <989 empty items>, 321 ]
Paul
Но почему там length становится undefined - хз
Сергей
Окей, а какой тогда самый верный способ узнать длину массива, если length не даёт в некоторых случаях полезной информации?
stay
Но почему там length становится undefined - хз
Не становится он undefined, остается 10
Paul
Paul
А, да
Paul
ВСе ок, я слепой
Paul
андефайнд это результат операции в консольке
Anonymous
массив заполняет пустоту доходя до i
stay
Да да
Paul
Ты пытаешься запихнуть в него элемент с индексом больше 32 бит, но он не может поменять length
Paul
Поэтому элемент с таким индексом он добавил, а length не тронул
Paul
Тогда это в силе
stay
Странно, что он просто не выдает RangeError, как например при new Array(2**32)
Paul
new array это конструктор
Paul
А тут ты просто стучишься в свойство объекта
Paul
Ерроры не предусмотрены
Сергей
В общем выходит, что синтаксис arr[index] такой же сломаный, как и многие другие части js и для корректной работы лучше использовать Array.prototype.push()
Anton
Окей, а какой тогда самый верный способ узнать длину массива, если length не даёт в некоторых случаях полезной информации?
как вариант можно получить индексы заполненных позиций массива Object.keys(arr), но так лучше делать только если вы точно знаете, что у вас массив размерностью больше чем Int32
Paul
Не сломаный, он такой какой есть
Paul
Но класть что-то в массив по ключу — вообще стремная идея
Paul
immutability и все дела
Anonymous
javascript на самом деле умный он понимает такое var arr = [1, 2, 3, ]; // запятая в конце заметьте arr.length => 3 var arr = [1,2,3,,,] // несколько запятых заполняется undefined arr.length => 5
Anton
ну у меня браузер упал, когда я пытался заполнить массив данными а-ля "значение элемента массива равно индексу элемента массива"
Anton
зато зимой в Сибири можно запустить такой скрипт на телефоне и согреться :)
stay
Это похоже на предел
stay
Фантастика. Выкинул ошибку, но значение присвоил 🤔
Anton
Anton
забавно читать редкие части документации (а я думал оно true возвращает)
stay
забавно читать редкие части документации (а я думал оно true возвращает)
Не, я знал, чт оно возвращает. Забавно. Получается, если использовать .push на массив, длиной 2**32-1, то он просто заменит последний индекс
Anton
а он вроде и не заменил
stay
Заменяет
Anton
not_bad.jpg
Danila
Ребят как можно захешировать названия классов в html и css? Желательно через webpack
Anonymous
Заменяет
индекс с 0))) не заменяет он ничего
stay
индекс с 0))) не заменяет он ничего
При чем тут индекс с нуля?
JK
Ребят как можно захешировать названия классов в html и css? Желательно через webpack
styled components / css modules https://develoger.com/how-to-obfuscate-css-class-names-with-react-and-webpack-20e2b5c49cda
Anonymous
При чем тут индекс с нуля?
кстати забавный случай
Paul
CSS модули не привязаны к реакту
Danila
Pug + sass
JK
настрой вебпак.
JK
или любой сборщик
Danila
настрой вебпак.
Вот не как не могу нагуглить. Если не сложно накидай простенький пример
JK
дак в посте выше есть пример, css-loader твоя тема
Paul
https://github.com/css-modules/webpack-demo
Paul
Там в примерах реакт, но опять же, css modules работает и без него
Paul
Paul
Юзается также как и в реакте
Paul
pug хз, не работал с ним
JK
Вот не могу не как связать его с pug
откуда нам знать, как у тебя шаблонизация настроена. Гугли по кейвордам
Danila
Юзается также как и в реакте
Ну а если без webpack, просто штука куда кидаешь html и css и он заменяет по селекторам
JK
https://github.com/css-modules/postcss-modules#pug-ex-jade
Dubzer
Приветствую. У меня есть список нескольких элементов из HTMLCollection с одинаковым классом. Подскажите, как можно поменять класс всем элементам сразу?
Oleksii
[..].forEach(e=>e.class = "newClass"); ?
Oleksii
но меня не слушай.. может есть способ получше:)
Dubzer
[..].forEach(e=>e.class = "newClass"); ?
вообще я думал есть какой-нибудь готовый способ, но наверное придется через foreach
Dubzer
просто здесь в js какой-то странный фурыч этот... =)
Oleksii
ну возможно есть чето типа $([...]).class("newClass")
Oleksii
но думаю он сделает то же самое. только это jsquery надо лепить. если не юзаеш
Dubzer
но думаю он сделает то же самое. только это jsquery надо лепить. если не юзаеш
я принципиально не юзаю всякие фреемворки, чтобы понимать, что вообще происходит )
JK
.forEach na HTMLCollection не везде сработает