请使用字面量值创建对象,eslint: no-new-object
// bad const a = new Object{} // good const a = {}
别使用保留字作为对象的键值,这样在 IE8 下不会运行
// bad const a = { default: {}, // default 是保留字 common: {} } // good const a = { defaults: {}, common: {} }
当使用动态属性名创建对象时,请使用对象计算属性名来进行创建
原因:因为这样做就可以让你在一个地方定义所有的对象属性
function getKey(k) { return `a key named ${k}` } // bad const obj = { id: 5, name: 'San Francisco' }; obj[getKey('enabled')] = true // good const obj = { id: 5, name: 'San Francisco', [getKey('enabled')]: true };
请使用对象方法的简写方式,eslint: object-shorthand
// bad const item = { value: 1, addValue: function (val) { return item.value + val } } // good const item = { value: 1, addValue (val) { return item.value + val } }
请使用对象属性值的简写方式,eslint: object-shorthand
原因:这样更简短且描述更清楚
const job = 'FrontEnd' // bad const item = { job: job } // good const item = { job }
将简写的对象属性分组后统一放到对象声明的开头
原因:这样更容易区分哪些属性用了简写的方式
const job = 'FrontEnd' const department = 'JDC' // bad const item = { sex: 'male', job, age: 25, department } // good const item = { job, department, sex: 'male', age: 25 }
只对非法标识符的属性使用引号,eslint: quote-props
原因:因为通常来说我们认为这样主观上会更容易阅读,这样会带来代码高亮上的提升,同时也更容易被主流 JS 引擎优化
// bad const bad = { 'foo': 3, 'bar': 4, 'data-blah': 5 } // good const good = { foo: 3, bar: 4, 'data-blah': 5 }
不要直接使用
Object.prototype
的方法, 例如hasOwnProperty
、propertyIsEnumerable
和isPrototypeOf
方法,eslint:no-prototype-builtins原因:这些方法可能会被对象自身的同名属性覆盖 - 比如
{ hasOwnProperty: false }
或者对象可能是一个null
对象(Object.create(null)
)// bad console.log(object.hasOwnProperty(key)) // good console.log(Object.prototype.hasOwnProperty.call(object, key)) // best const has = Object.prototype.hasOwnProperty // cache the lookup once, in module scope. console.log(has.call(object, key)) /* or */ import has from 'has' // https://www.npmjs.com/package/has console.log(has(object, key))
优先使用对象展开运算符
...
来做对象浅拷贝而不是使用Object.assign
,使用对象剩余操作符来获得一个包含确定的剩余属性的新对象// very bad const original = { a: 1, b: 2 } const copy = Object.assign(original, { c: 3 }) // this mutates `original` ಠ_ಠ delete copy.a // so does this // bad const original = { a: 1, b: 2 } const copy = Object.assign({}, original, { c: 3 }) // copy => { a: 1, b: 2, c: 3 } // good const original = { a: 1, b: 2 } const copy = { ...original, c: 3 } // copy => { a: 1, b: 2, c: 3 } const { a, ...noA } = copy // noA => { b: 2, c: 3 }
文档更新时间: 2021-05-11 16:00 作者:姚连洲