crm踩坑記(一)

目錄

antd

  1. antd2.0.1裏的Cascorder這個組件,它的defaultValue不起做用,是一個bug。當我發現這是一個bug的時候,應該想着如何去避免這個bug,好比使用value, 而不是告訴別人這是個bug。要學會本身解決問題!!!

es6

Object.entries()

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()

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()

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), {})

eslint

Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins, 大概的意思是不要使用對象原型上的方法,由於原型上的方法可能被重寫了。This is whyprototype

那麼該如何避免這個問題呢?下面請看代碼:eslint

// bad
if (obj.hasOwnProperty('name')) {
}

// good
if (Object.prototype.hasOwnProperty.call(obj, 'name')) {
}

傻逼

多是本身代碼寫着寫着就將本身寫懵了,fields.concat(['xx']), 這行代碼執行後, 怎麼fields的值沒有變化。code

這真是一件很傻的事情。

其餘

  1. 一個簡單的需求並非看起來那麼簡單。
  2. 本身寫的代碼,必定要多測試,必定必定要!!!
  3. 此次向線上的數據庫裏插入了髒數據,之後遇到加了字段的需求,必定要多測試,多考量。

參考

mdn: Object.entries()
mdn: Object.keys()
mdn: Object.getOwnPropertyNames()

相關文章
相關標籤/搜索