Комментарии 21
Optional Chaining и Nullish Coalescing уже появились в TypeScript 3.7
+18
Да всем насрать на твой тайпскрипт
-44
Вроде недавно только RC версия выходила, быстро они.
Так-же в babel можно включить поддержку с помощью плагинов.
babeljs.io/docs/en/babel-plugin-proposal-nullish-coalescing-operator
babeljs.io/docs/en/babel-plugin-proposal-optional-chaining
Так-же в babel можно включить поддержку с помощью плагинов.
babeljs.io/docs/en/babel-plugin-proposal-nullish-coalescing-operator
babeljs.io/docs/en/babel-plugin-proposal-optional-chaining
0
Очень долго доходят до этого. В lodash/underscore давно уже есть flat, flatMap, и optional chaining (safe navigation). Надо было добавить в спецификацию тогда же, когда добавили Array.prototype.map/reduce/filter. Столько лет люди парятся с этим "person && person.address && person.address.street".
0
Что мешает перенести из lodash хотя бы часть супер полезных функций (например find, findIndex)
0
Разработчики стандартов явно вдохновились последним C#
0
Но проблема заключается в том, что и пустая строка в этом случае будет воспринята как ложное значение. Если это учесть — данный код надо переписать так:
const name = (obj.name && obj.name !== '') || 'Jane';
Так в name окажется или true или 'Jane'. Вроде ж имя хотели, причем даже пустая строка — нормальное имя.
const name = (obj.name || obj.name === '') ? obj.name : 'Jane';
Может как то так?
+4
Array.prototype.flat и Array.prototype.flatMap ведь уже во всех основных браузерах есть
0
const name = (obj.name && obj.name !== '') || 'Jane';
Я бы сказал, что описанное неудобство еще выше, поскольку и в предложенном варианте тоже будет ошибка, так как при пустой строке будет возвращаться true вместо имени. =)
Сейчас это даже будет что-то на манер:
const name = (obj.name && obj.name !== '') ? obj.name : 'Jane';
Так что да, ?? был бы очень полезен для простоты и чистоты
+1
Опциональные цепочки были бы очень полезны. Чего ещё мне часто не хватает — опционального добавления свойства в объект при его создании. Сейчас приходится извращаться, создавая объект без этого свойства, добавляя его отдельной строкой. Это размазывает логику, неудобно.
Можно, конечно, сделать вот так:
Но хотелось бы что-то более наглядное — ключи отдельно, значения отдельно и без ненужного обвеса. Например, как-то так:
Заодно и постфиксные условия ввести — они удобны иногда.
const data = {
prop1: 'prop1'
}
const condition = true
if (condition) {
data.prop2 = 'prop2
}
Можно, конечно, сделать вот так:
const condition = true
const data = {
prop1: 'prop1',
...(condition ? {prop2: 'prop2'} : null)
}
Но хотелось бы что-то более наглядное — ключи отдельно, значения отдельно и без ненужного обвеса. Например, как-то так:
const data = {
prop1: 'prop1',
prop2: 'prop2' if (condition)
}
Заодно и постфиксные условия ввести — они удобны иногда.
0
Вот так достаточно компактно?
const data = {
prop1: 'prop1',
...condition && { prop2: 'prop2' },
}
0
Такой вариант тоже использовал, забыл уже. Нет, не вполне достаточно. Логически однотипные фрагменты хочется видеть расположенными на одном уровне всё-таки, во избежание ошибок. Иногда даже с принудительными отступами и отключением lint. Условие может быть не выделено в переменную, как тут, и тогда скобки всё равно появятся, усложняя восприятие.
0
Насчет разделения разрядов чисел — очень сомнительная фича. Попробую пошутить:
«Давайте сделаем символ обозначающий три нуля — теперь можно нажать кнопку один раз вместо трех! Ммм, а что там в других языках? Давайте прилепим это и это, но на деле просто приправим сахаром! И еще! И еще! Обязательно добавить goto, а в довесок придумать gofrom, чтобы можно было писать вообще что угодно! И кровь из носу необходимы операторы для квантовой неопределенности!»
А вообще лучше бы занимались сильными сторонами JS чем впихиванием свистелок-перделок. В погоне за «улучшением» языка теряется его мощь и красота. Я очень люблю JS, но чем больше его «улучшают» тем меньше я понимаю другой код. Неспроста ругают классы в JS(которые не классы) и пишут на прототипах.
JS — другой язык, и он прекрасен по-своему. Не нужно его делать похожим(всего лишь) на другие популярные языки.
P. S: Это лишь мое мнение, но логика есть логика. Мы стараемся разбивать сложное на простое — элементарное, а не наоборот.
«Давайте сделаем символ обозначающий три нуля — теперь можно нажать кнопку один раз вместо трех! Ммм, а что там в других языках? Давайте прилепим это и это, но на деле просто приправим сахаром! И еще! И еще! Обязательно добавить goto, а в довесок придумать gofrom, чтобы можно было писать вообще что угодно! И кровь из носу необходимы операторы для квантовой неопределенности!»
А вообще лучше бы занимались сильными сторонами JS чем впихиванием свистелок-перделок. В погоне за «улучшением» языка теряется его мощь и красота. Я очень люблю JS, но чем больше его «улучшают» тем меньше я понимаю другой код. Неспроста ругают классы в JS(которые не классы) и пишут на прототипах.
JS — другой язык, и он прекрасен по-своему. Не нужно его делать похожим(всего лишь) на другие популярные языки.
P. S: Это лишь мое мнение, но логика есть логика. Мы стараемся разбивать сложное на простое — элементарное, а не наоборот.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ожидаемые новые возможности JavaScript, о которых полезно знать