Pia*_*swi 26 javascript object window-object
可以在这个小片段中看到该行为(将其作为全局脚本执行):
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
Run Code Online (Sandbox Code Playgroud)
undefined
Chrome中的警报产生但可以在IE和Firefox中使用.当我这样做时,我也得到一个奇怪的价值
alert(name);
Run Code Online (Sandbox Code Playgroud)
Dag*_*bit 29
window.name有一个特殊用途,应该是一个字符串.Chrome似乎明确地将其转换为字符串,因此var name = {};
实际上最终给出了全局变量name
(即window.name
)的值"[object Object]"
.因为它是原始的,所以properties(name.FirstName
)不会"坚持".
要解决此问题,请不要将其name
用作全局变量.
name
实际上window.name
,您的变量是因为声明的顶级变量var
附加到全局对象.
HTML5规范要求window.name
是一个DOMString
.这意味着,该值window.name
可以仅是一个字符序列,而不是一个对象.
在Chrome中,尝试用于window.name
存储除原始字符串之外的任何内容都会将值强制转换为原始字符串.例如:
window.name = {};
window.name === "[object Object]"; // true
Run Code Online (Sandbox Code Playgroud)
您可以通过使用name
不在顶级范围内的变量来避免此问题:
(function() {
var name = {};
// this `name` is not `window.name`
// because we're not in the top-level scope
console.log(name);
})();
Run Code Online (Sandbox Code Playgroud)
使用 ES6+,您可以将代码编写为let name
或const name
。这不会分配它或尝试覆盖window.name
. 更多关于这里。
let name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2230 次 |
最近记录: |