Это может стать нормой веб-грамматики, обсессивно-компульсивное расстройство больше не выдержит

внешний интерфейс JavaScript спецификация кода
Это может стать нормой веб-грамматики, обсессивно-компульсивное расстройство больше не выдержит

JavaScriptЕго всегда критиковали за то, что Netscape в 1995 году на его создание потребовалось 10 дней. Ничто не бывает совершенным за 10 дней, но как только определенные функции выпущены, ошибки или недостатки быстро становятся существенными, и их почти невозможно изменить.

JavascriptРазработка идет очень быстро, времени на корректировку дизайна просто нет. Через полтора года после его введения вышел международный стандарт. Недостатки дизайна не раскрываются полностью до того, как это станет нормой.

историческое наследие

Например, распространенные исторические недостатки дизайна:

  • nullа такжеundefinedИх очень легко спутать
  • ==проблема преобразования типа
  • varОбъявить о создании глобальной переменной
  • Автоматически вставлять точку с запятой в конце строки
  • Знак плюс может представлять собой сумму чисел или конкатенацию символов.
  • NaNстранная особенность
  • Более...

JavascriptМногие неточные функции, которые мы можем добавитьeslintизбегать. например отключитьvarа также==Писать код стало обязательным для большинства людей.

настоящее/будущее

сейчасCSS、DOM、HTMLСпецификация поW3Cсформулировать,JavaScriptСпецификация поTC39сформулировать. Те исторические изъяны тоже ушли в прошлое, но теперь есть неудовлетворительные нормы.

CSS-переменные

При объявлении переменной добавьте два дефиса перед именем переменной--

body {
  --foo: #7f583f;
  --bar: #f7efd2;
}

var()Функции используются для чтения переменных.

a {
  color: var(--foo);
  text-decoration-color: var(--bar, #7f583f);
}

Зачем выбирать две линии соединения (--) представляет собой переменную? потому что$одеялоSassПотраченный,@одеялоLessизрасходовать._,-, используется в качествеIE,chromeСовместимое написание.CSSВ объявлении переменной не найдено ни одного символа. Чтобы не конфликтовать, официальнаяCSSВместо этого переменные используют два дефиса.

Как официальная стандартная спецификация, она всегда влияет на развитие следующей отрасли. Удивительно, что им можно управлять с помощью сторонних плагинов. Некоторые разработчики жаловались: архитекторы Microsoft тоже бесполезны.

Многие приложения сейчас заброшеныSassа такжеless, повернулся кPostCSSобъятие. Компонентно-ориентированное программирование, бесполезноеSassа такжеlessКакие-то сложности внутри. Так--Занудство двух персонажей будет постоянной головной болью для разработчиков.

Частные свойства класса (предложение-класс-поля)

JavaScriptсерединаclassВсем это не чуждо, это какJavaизclassТочно так же.

Основное использование:

class BaseClass {
  msg = 'hello world';

  basePublicMethod() {
    return this.msg;
  }
}

наследовать:

class SubClass extends BaseClass {
  subPublicMethod() {
    return super.basePublicMethod();
  }
}

Статические свойства:

class ClassWithStaticField {
  static baseStaticMethod() {
    return 'base static method output';
  }
}

асинхронный метод

class ClassWithFancyMethods {
  *generatorMethod() {}
  async asyncMethod() {}
  async *asyncGeneratorMethod() {}
}

Предложение о частных свойствах класса теперь вошло в стандарт, который использует префикс ключевого слова # для украшения свойств класса.

class ClassWithPrivateField {
  #privateField;

  constructor() {
    this.#privateField = 42;
  }
}

Вы правильно прочитали, нетtypescriptсерединаprivateключевые слова.

class BaseClass {
  readonly msg = 'hello world';

  private basePrivateMethod() {
    return this.msg;
  }
}

Тем не менее, уродство синтаксиса # вызвало противоречие в сообществе:

«Предложение полей классов предоставило очень спорный синтаксис для доступа к закрытым полям — и удалось сделать единственное правильное, что позволило сообществу сосредоточить все споры на этом синтаксисе».

Капитулянтство ТС было вынуждено воплотиться в жизнь.

No dynamic access, no destructuring is a deal breaker for me

Мы делаем плагин eslint без полей частного класса и используем счетчики загрузок для учета оппозиции сообщества.

'#' как часть имени может вызвать путаницу, потому что this.#x !== this['#x'] такой странный

Разработчик интерфейса и член TC39 Хэ Шицзюнь также опубликовал несколько статей о Zhihu.class fields

Давайте посмотрим примерноprivateсторона:johnhash.net/2017/ Вот и все — будни…

Адрес предложения:GitHub.com/Job39/предложения…

globalThis

в различныхJavaScriptДля получения глобального объекта в среде требуется другой оператор. существуетWeb, пройти можноwindow,selfПолучить глобальный объект, но вWeb Workersтолько вselfМогу. существуетNode.js, необходимо использоватьglobal. В нестрогом режиме вы можете вернуться в функциюthisчтобы получить глобальный объект, иначе он вернетundefined

Поэтому вызовglobalпоявилось предложение. В основном используетсяglobalПеременная объединяет описанное выше поведение, но затем разворачивается и изменяет его наglobalThis, что вызвало бурное обсуждение.

globalThisЭто имя сделаетthisусложняться.

  1. thisЭта тема всегда беспокоила программистов, особенноJavaScriptНовичок, есть постоянный поток сообщений в блоге об этом
  2. ES6Облегчает задачу, потому что людям можно сказать, что они предпочитают стрелочные функции и просто используютthisОпределение внутреннего метода
  3. Настоящее времяJS(modules), нет реального глобальногоthis,такglobalThisдаже не ссылаясь на существующие концепции

Напрасно сейчас говорить, потому что вошлоstage 4

Адрес предложения:GitHub.com/Job39/предложения…

Суммировать

Слишком много мусора осталось в JavaScript. Теперь, затронутые этим шлаком, многие новые предложения должны быть скомпрометированы. В будущем она станет чрезвычайно сложной.

Возможно, когда-нибудь появится подмножество JavaScript без исторического багажа, который заменит его.

Статей, выпущенных в этом году

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