不小心使用内置标示符status后带来的悲剧

本文探讨了JavaScript中window.status属性在不同浏览器中的表现差异,特别是在将其重定义为布尔类型时导致的问题。通过一个示例函数说明了Firefox与其他浏览器在处理status属性时的不同行为。

代码大概是这样的

var status = true;
function changeSel() {
	if (status == false) {
		// do something
	} else {
		// do other thing
	}
}

有一个函数会将status设置为false,但后来每次调用changeSel都只进到else里的代码。

 

后发现status是window的一个属性,即全局变量。它用来设置状态栏的文本提示,字符串类型。多数浏览器都默认没有开启改功能。Firefox里可以手动开启,

1,地址栏输入 about:config

2,找到dom.disable_window_status_change,设置为false

 

各浏览器对重写status的表现不一样,如下

 

Firefox 19

 

Chrome 25

 

Safari 5

 

Opera 12

 

IE

 

可以看到,只有Firefox能修改window.status,将其有字符串类型改为了布尔类型false。其它浏览器都status值变成了字符串类型的"false"。

回到最上面的代码,"false" == false 的结果是false,所以非Firefox总在执行else里的代码。

 

相关:

各浏览器关键字/保留字作为对象属性的差异

JavaScript中同名标识符优先级

有name为action的表单元素时取form的属性action杯具了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值