为什么我不能在这种情况下分配 属性 的值?

Why can't I assign the value of property in this case?

这是我的代码:

let obj = {};

obj.__proto__ = "some value";
console.log(obj.__proto__ == Object.prototype);

是否因为 set __proto__ 规范了赋值过程,只允许对象或 null 成为 __proto__ 的值?

是的。 __proto__ setter需要做的,在第2步:

If Type(proto) is neither Object nor Null, return undefined.

在这种情况下它什么都不做,之前的原型保持不变。

另请注意,__proto__ 已弃用,应避免使用 setPrototypeOf(和 getPrototypeOf),这会使错误变得明确:

let obj = {};

Object.setPrototypeOf(obj, "some value");