Николай
Как конкретно ты хочешь сравнить массивы? одинаковые значения? одинаковые пары ключ-значение?
Сергей
оба массива при этом можно и отсортировать по одинаковому принципу
Николай
думал так сделать. Думаю lodash по такому принципу и сравнивает
Николай
оба массива при этом можно и отсортировать по одинаковому принципу
Николай
почему? Я понимаю, что в js это так, но почему?
Николай
и не должны быть
Sergey
потому что при сравнении данных не являющихся примитивами ты сравниваешь ссылки а не содержание объектов
Павел
почему? Я понимаю, что в js это так, но почему?
Тебе выше написали хороший пример - две пустые коробки это одна и та же коробка? Нет? Почему?
Sergey
т.е. для всех не примитивных типов идет проверка что это один и тот же объект а не эквивалентные объекты
Illia
массив как и обьект это, грубо говоря, указатель на ячейку памяти, и ты сравниваешь не визуально две скобочки, а адреса в памяти
Николай
вот это очень внятный ответ.
Николай
потому что при сравнении данных не являющихся примитивами ты сравниваешь ссылки а не содержание объектов
Николай
т.е. для всех не примитивных типов идет проверка что это один и тот же объект а не эквивалентные объекты
Anton Saprykin
Было бы удобнее если бы происходило то же что и написано
Anton Saprykin
Написал [] === [] значит оно сука равно
Николай
такой пример можно ко всему подстроить. Все объекты в реале разные. Тут дело не только в коробке.
Николай
Тебе выше написали хороший пример - две пустые коробки это одна и та же коробка? Нет? Почему?
Anton Saprykin
Да, но на бумаге же они одинаковые
Anton Saprykin
И в редакторе
Anton Saprykin
Но в компьютере разные
Illia
[] лежит в 0x23abc2 а [] в 0х34hab2
Anton Saprykin
Зачем усложнять
Николай
почему-то поржал)) дада, я уже понял, что массивы всегда разные, но пример такой абсурдный))
Николай
Написал [] === [] значит оно сука равно
Павел
такой пример можно ко всему подстроить. Все объекты в реале разные. Тут дело не только в коробке.
Они и тут разные. Проинициализировав два массива ты создал две коробки
Anton Saprykin
В то время как "a" === "a" и правда равны
Павел
И не важно, что они очень похожи на первый взгляд. То одна коробка, а это другая
Sergey
Написал [] === [] значит оно сука равно
Простой пример где проверка соответствия всех элементов упадет var a = {}; a.a = a;
Николай
Они и тут разные. Проинициализировав два массива ты создал две коробки
я понимаю. Я понимаю, что ссылки разные и если вникать, то это ну совершенно разные коллекции ссылок. Просто когда ты пишешь "что-то равно точно такому же" и получаешь ложь, то это просто улыбает.
Anton Saprykin
Они не похожи. Они идентичны
Anton Saprykin
Короче это все плохой дизайн
pa[aad
Зачем усложнять
если бы ты писал хотя бы на каком-то низкоуровневом языку, то таких бы вопросов бы не задавал или хотя бы книгу просто вот почитал, по Си / С++
D_d
@Helight59 жизнь тебя еще ни раз улыбнет! а javascript тем более
Павел
я понимаю. Я понимаю, что ссылки разные и если вникать, то это ну совершенно разные коллекции ссылок. Просто когда ты пишешь "что-то равно точно такому же" и получаешь ложь, то это просто улыбает.
тут ничего не должно улыбать. просто ты не понимаешь что сравниваешь. когда ты спрашиваешь равен ли массив другому массиву ты сравниваешь МАССИВЫ, а не их содержимое.
Николай
@Helight59 жизнь тебя еще ни раз улыбнет! а javascript тем более
я уже думал я все рофлы с него поймал.
pa[aad
86й интел ассемблер пойдет?
не, перфокарты самое, то, сразу логично станет кстате, да, это самый вменяемый вариант
Anton Saprykin
Короче я понял, вы начинались книг и только в теории базар тянете, а на практике [] === [] равны сука
Anton Saprykin
Вот есть у тебя две монетки по рублю
Anton Saprykin
Они же равны и нам не нужно молекулярную массу сравнивать и все такое
pa[aad
Короче я понял, вы начинались книг и только в теории базар тянете, а на практике [] === [] равны сука
учи С++ и вопросы такие глупые отпадут, тебе никто не обязан доказывать ) просто не задавай такие вопросы )
Anton Saprykin
учи С++ и вопросы такие глупые отпадут, тебе никто не обязан доказывать ) просто не задавай такие вопросы )
Зачем мне учить C++? А если выучу и вопросы, которые ты называешь глупыми, не отпадут, ты мне время компенсируешь? Советчики мля.
Павел
улыбка чисто из-за визуальщины
Тут и визуальщины нет. Ты не сравниваешь что-то с точно таким же. Ты сравниваешь разные объекты. Чем раньше вникнешь в такие вещи, тем меньше проблем в дальнейшем будет
pa[aad
Зачем мне учить C++? А если выучу и вопросы, которые ты называешь глупыми, не отпадут, ты мне время компенсируешь? Советчики мля.
смотря, вот насколько простой пример что бы передавать объект допустим в другое место он передается полностью, а это плохо, это время, а вот если передать константную ссылку на тот объект в памяти, то это быстрее чем передавать весь объект понимаешь ?
Павел
ты меня просто не понял.
Да понял я. Все на JS сталкиваются со сравнением пустых объектов или массивов в первый раз. И не понимают в чем дело. Это нормально
Sergey
причем в некоторых случаях сделать копию объекта по сути невозможно
Sergey
pa[aad
Ты что несешь вообще.
я понял, ты не понимаешь
Anton Saprykin
Я понимаю что ты сравниваешь C++ и js
Anton Saprykin
Больше мне нечего тебе сказать
pa[aad
Я понимаю что ты сравниваешь C++ и js
там так же внутри движка, поц
Sergey
у плюсов и js и у большинства языков поддерживающих объекты схожие методы сравнения и копирования объектов
pa[aad
https://learn.javascript.ru/object-reference
Anton Saprykin
Если я дом построил из камня, а камень не горит, значит он гореть не будет и не важно что крыша деревянная?
pa[aad
Накладные расходы с передачей по ссылке: для каждого доступа требуется разыменование, т.е. есть еще одно чтение в памяти Накладные расходы с передачей по значению: значение нужно скопировать в стек или в регистры Для небольших объектов, таких как целое число, передача по значению будет быстрее. Для больших объектов (например, для большой структуры) копирование создает слишком много служебных данных, поэтому передача по ссылке будет быстрее.
Николай
я не понимаю вас. Все отлично знаю про передачу по ссылке. Не знал я то, что если у тебя сравниваются массивы, то сравнивается только их ссылка
Николай
https://learn.javascript.ru/object-reference
Anton Saprykin
Че ты мне все про поинтеры про свои паришь
pa[aad
Че ты мне все про поинтеры про свои паришь
это основа основ, и если тебе не доходит, то только поможет лоботомия - я все
pa[aad
Когда вы передаете по значению, вы сообщаете компилятору сделать копию сущности, которую вы передаете по значению. Когда вы передаете по ссылке, вы сообщаете компилятору, что она должна использовать фактическую память, на которую ссылается ссылка. Компилятор не знает, делаете ли вы это в попытке оптимизировать или потому, что ссылочное значение может быть изменено в каком-то другом потоке (например). Он должен использовать эту область памяти. Передача по ссылке означает, что процессор должен получить доступ к этому конкретному блоку памяти. Это может быть или не быть самым эффективным процессом, в зависимости от состояния регистров. При передаче по ссылке можно использовать память в стеке, что увеличивает вероятность доступа к кешу (гораздо быстрее). Наконец, в зависимости от архитектуры вашего компьютера и типа, который вы передаете, ссылка может быть больше, чем значение, которое вы копируете. Копирование 32-битного целого числа предполагает копирование меньше, чем передача ссылки на 64-битной машине. Таким образом, передача по ссылке должна выполняться только тогда, когда вам нужна ссылка (для изменения значения или потому, что значение может быть изменено в другом месте), или при копировании ссылочного объекта дороже, чем разыменование необходимой памяти. В то время как эта последняя точка нетривиальна, хорошим правилом является выполнение того, что делает Java: передать основные типы по значению и сложные типы по ссылке (const).
Illia
чувак люто троллит
Illia
нахер вообще что-то ему вдалбливать?
Anton Saprykin
Вот когда malloc введут в js тогда и поговорим
Anton Saprykin
А сейчас [] === []
Anton Saprykin
Куда логичнее чем [] !== []
Николай
Anton Saprykin
В C++ кстати еще ; обязательны. Что по этому поводу скажешь?
Павел
Их какбэ и в js лучше ставить
Anton Saprykin
Но они не обязательны
Igor
В C++ кстати еще ; обязательны. Что по этому поводу скажешь?
Тебя сразу везде банить, чтоб холивары не разводил?
Anonymous
Но они не обязательны
по стандарту обязательны
Anton Saprykin
Да мало ли какие там стандарты
Anton Saprykin
Запустится же без этого