antd2.0.1
裏的Cascorder
這個組件,它的defaultValue
不起做用,是一個bug。當我發現這是一個bug的時候,應該想着如何去避免這個bug,好比使用value
, 而不是告訴別人這是個bug。要學會本身解決問題!!!Object.entries()
方法返回給定對象本身的枚舉屬性[key, value]
對的數組。其順序和與for...in
循環提供的順序相通,區別在於for...in
循環枚舉原型中的屬性。es6
下面看例子:數據庫
const Person = { name: 'yuzf', age: '18', gender: 'man', }; // [['name': 'yuzf'], ['age': 18], ['gender', 'man']] console.log(Object.entries(Person)); const result = {}; // 數組解構/for of 循環 for (const [key, value] of Object.entries(Person)) { // good result[key] = value; // bad // result.key = value; }
Object.keys()
返回一個數組,其元素是對應於直接在對象上發現的可枚舉屬性的字符串(即不包含原型鏈上的)。屬性的順序與經過手動循環對象的屬性給出的順序相同。數組
下面直接看代碼說明:antd
const arr1 = ['a', 'b', 'c']; console.log(Object.keys(arr1)); // ['0', '1', '2'] const person = { name: 'yuzf', age: 18, gender: 'man', }; for (const key of Object.keys(person)) { console.log(key); // name, age, gender }
Object.getOwnPropertyNames()
方法返回一個直接發現給定對象的全部屬性(可枚舉和不可枚舉)的數組。測試
下面看代碼例子:ui
const arr = ['a', 'b', 'c']; console.log(Object.getOwnPropertyNames(arr).sort); // logs: ['0', '1', '2', 'length'] const arr2 = { name: 'yuzf', age: 18, gender: 'man', }; console.log(Object.getOwnPropertyNames(arr).sort); // logs: ['name', 'age', 'gender']
以前,我也遇到這樣的需求, 將一個數組裏包含的多個對象轉成一個對象,結構像下面這個樣子:this
// origin const Person = [ { name: 'yuzf'}, { age: 18 }, { gender: 'man' }, ]; // to => this { name: 'yuzf', age: 18, gender: 'man', } // do const obj = Person.reduce((x, y) => Object.assign({}, x, y), {})
Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins
, 大概的意思是不要使用對象原型上的方法,由於原型上的方法可能被重寫了。This is why。prototype
那麼該如何避免這個問題呢?下面請看代碼:eslint
// bad if (obj.hasOwnProperty('name')) { } // good if (Object.prototype.hasOwnProperty.call(obj, 'name')) { }
多是本身代碼寫着寫着就將本身寫懵了,fields.concat(['xx'])
, 這行代碼執行後, 怎麼fields的值沒有變化。code
這真是一件很傻的事情。
mdn: Object.entries()
mdn: Object.keys()
mdn: Object.getOwnPropertyNames()