目錄
antd
antd2.0.1
里的Cascorder
這個組件,它的defaultValue
不起作用,是一個bug。當我發現這是一個bug的時候,應該想着如何去避免這個bug,比如使用value
, 而不是告訴別人這是個bug。要學會自己解決問題!!!
es6
Object.entries()
Object.entries()
方法返回給定對象自己的枚舉屬性[key, value]
對的數組。其順序和與for...in
循環提供的順序相通,區別在於for...in
循環枚舉原型中的屬性。
下面看例子:
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()
Object.keys()
返回一個數組,其元素是對應於直接在對象上發現的可枚舉屬性的字符串(即不包含原型鏈上的)。屬性的順序與通過手動循環對象的屬性給出的順序相同。
下面直接看代碼說明:
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()
Object.getOwnPropertyNames()
方法返回一個直接發現給定對象的所有屬性(可枚舉和不可枚舉)的數組。
下面看代碼例子:
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']
很神奇的用法!!!
之前,我也遇到這樣的需求, 將一個數組里包含的多個對象轉成一個對象,結構像下面這個樣子:
// 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), {})
eslint
Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins
, 大概的意思是不要使用對象原型上的方法,因為原型上的方法可能被重寫了。This is why。
那么該如何避免這個問題呢?下面請看代碼:
// bad
if (obj.hasOwnProperty('name')) {
}
// good
if (Object.prototype.hasOwnProperty.call(obj, 'name')) {
}
傻逼
可能是自己代碼寫着寫着就將自己寫懵了,fields.concat(['xx'])
, 這行代碼執行后, 怎么fields的值沒有變化。
這真是一件很傻的事情。
其他
- 一個簡單的需求並不是看起來那么簡單。
- 自己寫的代碼,一定要多測試,一定一定要!!!
- 這次向線上的數據庫里插入了臟數據,以后遇到加了字段的需求,一定要多測試,多考量。
參考
mdn: Object.entries()
mdn: Object.keys()
mdn: Object.getOwnPropertyNames()