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);
添加回答
举报