“javascript:;”和“javascript:”在href属性中有什么区别?

5
在锚点的href属性中,“javascript:;”和“javascript:”有什么区别?

11
第一句话有一个分号,第二句没有。 - VisioN
1
想知道相似性吗?两者都很糟糕。 - Ejaz
4个回答

8
与空的JavaScript文件和只有一个;的JavaScript文件之间的区别相同。
什么也没有:
eval("");
//undefined
eval(";");
//undefined

请见http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1 当程序从左到右解析时,如果遇到输入标记的流末尾,并且解析器无法将输入标记流解析为单个完整的ECMAScript程序,则自动在输入流的末尾插入分号。
因此,空文件将是一个无效的程序,然后会自动插入分号,使其等同于只有一个分号的程序。
我刚想到又一个证明JSON不是Javascript子集的案例:空JSON是无效的。
JSON.parse("");
//SyntaxError: Unexpected end of input
eval("");
//undefined

:P


6

javascript:表示伪协议,可以用于评估 JavaScript。因此,在其后面添加一个分号等于包含空表达式;的脚本,它什么也不做。如果在javascript:后面没有任何其他内容,则是一个空脚本,也什么也不做。在这两种情况下,返回值都是undefined,这很重要,因为javascript: url返回其他内容会导致页面内容被替换为它返回的内容。

但是,您根本不应该使用javascript: urls - 它们已被弃用。请使用onclick和有用的href或#(如果没有非js版本的链接)。在这种情况下,请记得防止默认事件。


谢谢您的回答,我只想纠正一下,页面内容并不会被javascript:返回的内容所替换,尝试使用javascript: 10javascript: 'google.com',它们都不会有任何作用。 - dhblah
我不同意 javascript: 不应该被使用,因为总有可能有人会忘记在 onclick 上添加 return false; 或者函数会抛出异常,这将导致一个难以解决的错误。 - dhblah
1
http://jsfiddle.net/ThiefMaster/MJ4nb/ - 它将被表达式的结果所替代...如果您足够早地preventDefault()(我通常在事件处理程序的第一行中执行它,如果它应该无条件执行),那么抛出异常不会成为问题。 - ThiefMaster
在哪里被替换了?我什么也没看到,点击根本没有任何反应,什么都没有发生。 - dhblah
可能并非所有浏览器都支持此操作。在火狐浏览器中,我得到的结果是显示10而非之前的内容。 - ThiefMaster
可能在Chrome中什么也不会发生。 - dhblah

1

javascript:表示接下来要执行JavaScript语句,而不是跳转到另一个页面。 ;是JavaScript语句的结尾标志。然而,;本身并不会执行任何操作,因此这是一个空操作。


0

javascript:; 是带有附加分号的 javascript:。除此之外,没有任何区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接