变量名称和 window.name
var name and window.name
如果我定义一个名为 name
的 JavaScript 全局变量,这会隐藏 window.name 属性吗?
我在Facebook JavaScript身份验证API的上下文中问这个问题,因为我注意到拥有该名称的全局会破坏它,而且因为我看到window.name
在他们的代码中使用
如果 name
是全局变量,则 name
和 window.name
是等效的。
变量和函数是全局对象的成员。在浏览器中,全局对象包含一个窗口成员,其值是全局对象。
如果使用 var
在全局范围内声明一个变量,它将在全局对象上创建一个属性或写入现有对象(如 name
):
var name = 5;
console.log(window.name === '5'); // true
console.log(name === '5'); // true
console.log(Object.getOwnPropertyDescriptor(window, 'name'));
// object with get and set
var foo = 6;
console.log(Object.getOwnPropertyDescriptor(window, 'foo'));
// object with value
Object.defineProperty(window, 'bar', {
writable: false,
});
var bar = 7; // throws in strict mode
var baz;
console.log('baz' in window); // true
如果使用 let
或 const
声明它,则不会:
const name = 5;
console.log(window.name); // likely an empty string
console.log(name === 5); // true
console.log(Object.getOwnPropertyDescriptor(window, 'name'));
// same as var
const foo = 6;
console.log(window.foo); // undefined
console.log(Object.getOwnPropertyDescriptor(window, 'foo'));
// undefined
Object.defineProperty(window, 'bar', {
writable: false,
});
const bar = 7; // succeeds
let baz;
console.log('baz' in window); // false
相关文章:
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- 直接下载文件,而不是从window.open(url)
- $window.ga在AngularJS事件中未定义
- 如何将PDF作为二进制文件传递到window.open()
- window.onload没有'无法在Android WebView中工作
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- window.location替换并传递URL历史记录条目中的变量
- Form.target=window.opener.name不起作用
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 变量名称和 window.name
- 使用jQuery突出显示效果时 window.name 的奇怪问题
- window.name 作为数据传输:一种有效的方法
- 谷歌浏览器不考虑 window.name
- 如何从Http处理程序中设置window.name属性
- 可以使用类似top.window.name的东西吗
- 使用window.name进行跨域消息传递
- 哪些字符都被认为对window.name有效
- 一个firefox插件怎么能找到带有window.name="mywindow"的标签呢?
- 当使用window.frames[name]访问时,iframe contentWindow未定义
- 是否可以使用target和window.name