Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4

Logical nullish assignment

30.04.2021, 16:27. Показов 1900. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На MDN вот что написано:
JavaScript
1
2
3
4
5
6
7
8
// Выражение:
x ??= y;
 
// эквивалентно этому выражению:
x ?? (x = y);
 
// Но не эквивалентно этому:
x = x ?? y;
Третье выражение не эквивалентно, потому что операция присваивания происходит в любом случае. Хотя результат в итоге одинаков.

Кто-нибудь может привести пример, когда это вроде как лишняя операция на что-то реально повлияет?

Добавлено через 10 минут
Протестировал на jsbench - отличие по скорости - доли процента, причем в рандомальную сторону.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2021, 16:27
Ответы с готовыми решениями:

Поле типа logical
Есть поле типа logical. Нужно сделать так, чтобы при отметке Caption в поле ставилась отметка (ДА).

Assembler logical operations
how to write this task? if in BX the three left bytes are equal to the three right bytes MOV DL, 1 else MOV DL,0

Русское да/нет к полю Logical
Доброго времени суток! Помогите решить следующую проблему. В данный момент в моей программе для выборки из БД в логическом поле в...

9
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
01.05.2021, 07:53
DimaDima1985, операция присвоения настолько микроскопически затратна, что практически незаметна на фоне огромного количества плохо спроектированного кода.
0
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
01.05.2021, 08:59  [ТС]
amr-now, так я о том же, но измерениях в jsbench вообще нет разницы.
Вот и спрашиваю, может есть какой-то вариант кода, где это хоть как-то повлияет на скорость.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
01.05.2021, 09:16
DimaDima1985, кроме того, что микроскопическая разница,
весь скрипт ещё и оптимизируется в машинных кодах компилятором.
Так что да. Вообще нет разницы. Не заморачивайтесь. В программировании есть намного более серьезные вопросы, которые взрывают мозг.
1
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
01.05.2021, 09:23  [ТС]
amr-now, но на MDN этому факту посвящён отдельный абзац, выделенный красным фоном. Причём у операторов &&= и ||= аналогично.
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
01.05.2021, 13:13
Лучший ответ Сообщение было отмечено DimaDima1985 как решение

Решение

есть 1-н юзкейс который я могу представить, когда такое поведение (присваивание как в 3-м варианте) может быть не желательно и нужно помнить и знать о нём.. (но это скорее всего edge case какой-то)

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class A {
  #x = null;
  get x() {
    return this.#x;
  }
  set x(value) {
    this.#x = value / 2; // либо какая-то другая мутация с value, но такая, что value !== this.#x
  }
  reset() {
    this.#x = null;
  }
}
 
// и тогда
 
const a = new A();
 
a.x ??= 12;
// a.x === 6
a.x ??= 12;
// a.x === 6
 
a.reset();
// a.x === null
 
a.x = a.x ?? 12;
// a.x === 6
a.x = a.x ?? 12;
// a.x === 3; !!!!!
ну и походу mdn просто говорит о том, что происходит операция присваивания в любом случае при 3-м варианте.. нужно помнить для "вот таких" случаев..
1
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
01.05.2021, 13:38  [ТС]
muxahuk1214, отличный пример! Такое надо на MDN в качестве примера написать, действительно, есть серьёзное отличие, всё из-за наличия геттера-сеттера.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
01.05.2021, 15:27
Цитата Сообщение от DimaDima1985 Посмотреть сообщение
всё из-за наличия геттера-сеттера.
В данном случае, любая операция вместо ?? будет также непредсказуемой:
JavaScript
1
2
3
4
5
a.x = a.x * 2;
// a.x === 6; !!!!!
a.x = a.x * 1;
// a.x === 3; !!!!!
// etc
0
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
01.05.2021, 15:30  [ТС]
Tavashi, ну, это само собой. Нужен был конкретный пример для замечания из MDN.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
01.05.2021, 15:40
DimaDima1985, imho: это пример не для LNA, а для любых операций. ?? здесь ничем не выделяется, не имеет конкретики. И все из-за, как вы написали, сеттера.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2021, 15:40
Помогаю со студенческими работами здесь

Deep flaws in lisp's logical foundations
About this Alan Kay says: there where deep flaws in its logical foundations. By this, I mean that the pure language was supposed to be...

Запись в DBF данных типа Logical
проблема такая: не могу добавить в таблицу данные типа Logical. String conStr="Driver={Microsoft dBASE Driver...

Logical Focus для кнопок в WinForms
Здравствуйте, у меня возникла проблемой с которой я бьюсь уже больше месяца. Есть приложение (Тетрис) в котором pictureBox, на котором...

FORTRAN77, компилятор принимает logical функцию за real
Здравствуйте. Сразу что бы не было вопросов: вынужден писать именно на 77-ом стандарте по требованию преподавателя и программы. Столкнулся...

Заполнить массив типа bool из БД (тип поля logical)
надо сделать типа bool mass={0,1,0,1,0) я создал поле типа logical в access while(!Query->Eof) { int i=0; bool mass; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru