不小心使用内置标示符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杯具了

 

posted on 2013-03-29 17:50  snandy  阅读(1610)  评论(0编辑  收藏  举报