我遇到了一个奇怪的 JavaScript 行为,无法解释。
请考虑以下代码:
var el = document.createElement('div')
var s = String.fromCharCode(160)
el.innerHTML = s
console.log(s) // prints space
console.log(el.innerHTML) // prints " "
现在我知道 
是不间断空格,但从技术上讲,我只是将一个变量分配给另一个变量,两个变量都是字符串。
innerHTML
是一种特殊的字符串吗?
它是如何工作的?什么机制可以将其转换?
el.innerHTML.__proto__
仍然显示这是 _String_。 - Yossi Vainshteinel.innerHTML.__proto__
是String
。 :-) 你正在访问 getter 函数的返回值(它是一个字符串)上的__proto__
,而不是 getter 函数本身(就像x = el.innerHTML; x.__proto__;
)。 相反,您需要查看Object.getOwnPropertyDescriptor(el, "innerHTML")
的结果,但由于它是 DOM 属性,因此浏览器不必支持它上面的操作。(但如果您想要查看 JS 对象的访问器...) - T.J. Crowder