Руководство по написанию JavaScript-кода от Airbnb() {
Наиболее разумный подход к написанию JavaScript-кода
Замечание: это руководство подразумевает использование Babel вместе с babel-preset-airbnb или аналогом. Оно также предполагает установленный shims/polyfills в вашем приложении, такой как airbnb-browser-shims или аналог.
Это руководство также доступно на других языках. Смотрите Переводы.
Symbol и BigInt не могут быть полностью заполифиллены, поэтому они не должны использоваться, если разработка ведётся для браузеров или других сред, которые не поддерживают их нативно.
1.2Сложные типы: Когда вы взаимодействуете со сложным типом, вы работаете со ссылкой на его значение.
2.3 Помните, что у let и const блочная область видимости, в то время как var имеет функциональную область видимости.
// const и let существуют только в том блоке, в котором они определены.{leta=1;constb=1;varc=1;}console.log(a);// ReferenceErrorconsole.log(b);// ReferenceErrorconsole.log(c);// 1
В приведённом выше коде вы можете видеть, что ссылки на a и b приведут к ошибке ReferenceError, в то время как c содержит число. Это связано с тем, что a и b имеют блочную область видимости, в то время как у c функциональная.
3.7 Не вызывайте напрямую методы Object.prototype, такие как hasOwnProperty, propertyIsEnumerable, и isPrototypeOf. eslint: no-prototype-builtins
Почему? Эти методы могут быть переопределены в свойствах объекта, который мы проверяем { hasOwnProperty: false }, или этот объект может быть null (Object.create(null)).
// плохоconsole.log(object.hasOwnProperty(key));// хорошоconsole.log(Object.prototype.hasOwnProperty.call(object,key));// отличноconsthas=Object.prototype.hasOwnProperty;// Кэшируем запрос в рамках модуля.console.log(has.call(object,key));/* или */importhasfrom'has';// https://www.npmjs.com/package/hasconsole.log(has(object,key));
3.8 Используйте синтаксис расширения вместо Object.assign для поверхностного копирования объектов. Используйте параметр оставшихся свойств, чтобы получить новый объект с некоторыми опущенными свойствами. eslint: prefer-object-spread
4.7 Используйте операторы return внутри функций обратного вызова в методах массива. Можно опустить return, когда тело функции состоит из одной инструкции, возвращающей выражение без побочных эффектов. 8.2. eslint: array-callback-return
// хорошо[1,2,3].map((x)=>{consty=x+1;returnx*y;});// хорошо[1,2,3].map((x)=>x+1);// плохо - нет возвращаемого значения, следовательно, `acc` становится `undefined` после первой итерации[[0,1],[2,3],[4,5]].reduce((acc,item,index)=>{constflatten=acc.concat(item);});// хорошо[[0,1],[2,3],[4,5]].reduce((acc,item,index)=>{constflatten=acc.concat(item);returnflatten;});// плохоinbox.filter((msg)=>{const{ subject, author }=msg;if(subject==='Mockingbird'){returnauthor==='Harper Lee';}else{returnfalse;}});// хорошоinbox.filter((msg)=>{const{ subject, author }=msg;if(subject==='Mockingbird'){returnauthor==='Harper Lee';}returnfalse;});
4.8 Если массив располагается на нескольких строках, то используйте разрывы строк после открытия и перед закрытием скобок.
请发表评论