1 回答

TA貢獻1860條經驗 獲得超8個贊
似乎您誤解了Object.assign函數的工作方式。Object.assign函數的作用是遍歷源參數的每個屬性(第一個參數之后的參數),并在第一個參數中覆蓋它。
您的示例中的問題是您嘗試使用String作為其參數調用Object.assign Object.assign('abc', 'def')。JavaScript中的字符串文字實際上是字符數組,而對象中的數組是以索引為屬性的。默認情況下,不能重新分配字符串屬性(索引)(可寫:false)。
這是一個示范:
var a = 'abc';
console.log(a[0]) // outputs 'a'
var descriptor = Object.getOwnPropertyDescriptor(a, 0)
console.log(descriptor)
//outputs
/*
{ value: 'a',
writable: false,
enumerable: true,
configurable: false }
*/
Object.assign('abc', 'def');// throws Cannot assign to read only property '0' of object '[object String]'
如您所見,writable設置為false,這意味著您無法重新分配字符串中的每個字符。這解釋了為什么錯誤消息說字符串'abc'的屬性'0'不能分配新值。
所以解決方案是做student.password = passHash而不是Object.assign(student.password, passHash);
添加回答
舉報