Это поведение задокументировано так:
from getStringSet:
"Обратите внимание, что вы не должны изменять экземпляр набора, возвращенный этим вызовом. сохраненных данных не гарантируется, если вы это сделаете, и ваша способность вообще не изменять этот экземпляр. "
blockquote>И это кажется вполне разумным, особенно если оно задокументировано в API, иначе это API должен будет копировать каждый доступ. Поэтому причиной этого дизайна была, пожалуй, производительность. Я полагаю, что они должны заставить эту функцию возвращать результат, завернутый в немодифицируемый экземпляр класса, но это снова требует выделения.
«undefined» не может быть разрушен. Вы должны проверить, не определено ли оно, прежде чем разрушать.
let limit = {'amount': '1000', 'code': '£'}, outstanding = undefined, debt = {'amount': '900', 'code': '£'};
const retrieveAmounts = amountStruct => {
if (typeof amountStruct === 'undefined')
return null;
let {amount, code} = amountStruct;
return {
amount: isStringDefined(amount) ? amount : null,
currencyCode: isStringDefined(code) ? code : null
};
};
Встроенный код @ alex35.
const retrieveAmounts = (amountStruct) => ((typeof amountStruct === 'undefined') ? null : {
amount: isStringDefined(amountStruct.amount) ? amountStruct.amount : null,
currencyCode: isStringDefined(amountStruct.code) ? amountStruct.code : null
});
Вы можете поместить параметр по умолчанию в вашу функцию retrieveAmounts
, так что помещение undefined в вашу функцию retrieveAmounts не приведет к ошибке.
const retrieveAmounts = (outstanding = { amount: null, code: null }) => ({ // << here
amount: isStringDefined(outstanding.amount) ? amount : null,
currencyCode: isStringDefined(outstanding.code) ? code : null
});