问题:Href attribute for JavaScript links: “#” or “javascript:void(0)”?
当我们需要为一个超链接绑定 javascript 事件时,通常有 2 中方法。这两种方法那种更好呢?
- 哪种性能最好?
- 哪种效率更高?
- 哪种更优雅?
- ……
这两种是:
<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>
或者
<a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>
回答:http://stackoverflow.com/a/138233/343194
我使用 javascript:void(0)
。
有 3 个原因:
在开发组中使用 #
,难免会带来一些问题。当我们写一个函数时,一般会有一个返回值,例如:
function doSomething() {
//Some code
return false;
}
但是他们总会忘记使用 return false
,这时如果直接写 doSomething()
就会出现问题。
第二个避免使用 #
的原因是,如果函数中出现了错误,或者抛出了异常,那么 return false;
将不会被执行。因此开发人员必须要妥善的处理函数中的错误。
第三个原因是,在大部分情况下我们需要动态的指定 onclick
的事件处理函数。这时我们就不能保证这个函数不抛出异常。我们一般使用面向对象的多态特性而不需要重复的编写相同或者相似的代码。因此我们的 onclick
应该这么写:
onclick="someFunc.call(this)"
或者
onclick="someFunc.apply(this, arguments)"
在以上三种情况,我使用 javascript:void(0)
还未发现任何问题。
综上所述,如果你是一个单独的开发者,你可以使用任何一种方式,但是如果是你开发小组的一员,你应该有所舍弃。
你可以使用 href="#"
,你需要确保 onclick
指定的函数总是返回 false 值,而且这个函数不能抛出任何异常。
或者
直接使用 href="javascript:void(0)"
。
显然,第二个更容易沟通。