[Z] 从Uncaught SyntaxError: Unexpected token ")" 问题看javascript:void的作用
栏目: JavaScript · 发布时间: 6年前
内容简介:https://blog.csdn.net/hongweigg/article/details/78094338问题在前端编程中,突然出现Uncaught SyntaxError: Unexpected token “)”的错误,行号1。这个错误真的很隐晦,开始还以为是其他JS文件的错误,结果发现错误原来就存在当前问件中。错误场景是这样的,使用<a>X</a>作为关闭窗口的按钮,代码如下:
https://blog.csdn.net/hongweigg/article/details/78094338
问题
在前端编程中,突然出现Uncaught SyntaxError: Unexpected token “)”的错误,行号1。这个错误真的很隐晦,开始还以为是其他JS文件的错误,结果发现错误原来就存在当前问件中。错误场景是这样的,使用<a>X</a>作为关闭窗口的按钮,代码如下:
<a href="javascript:void()" id="__sc_closeBtn" class="closeBtn" title="close"> X </a>
点完关闭后,就发生了开头提到的错误。
分析
该HTML段代码是使用JavaScript脚本动态插入到DOM树中的,当时并没有怀疑到是这个地方的问题,直到搜索相似错误时,发现有人也碰到了类似的问题。原来是<a>标签中脚本缺少了一个0。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>a标签javascript:void(0)与javascript:void()区别</title>
</head>
<body>
<a href="javascript:void(0)" id="__sc_closeBtn" class="closeBtn" title="close"> X </a>
<a href="javascript:void()" id="__sc_closeBtn" class="closeBtn" title="close"> X </a>
</body>
</html>
点第1个“X”时,不报错,点第2个“X”时报错,而且错误位置为1行7列,可见,问题出在<a>标签中的脚本上。
引申
为什么不加0就报错呢?看一下void的定义:
void 运算符
避免表达式返回值。
void expression
expression 参数是任意有效的 JScript 表达式。
void 运算符对表达式求值,并返回 undefined.在希望求表达式的值,但又不希望脚本的剩余部分看见这个结果时,该运算符最有用。
以上为void的含义,void 实际上是一个求职表达式,类似于eval,但不返回任何值。
在<a>标签中,href属性可以执行javascript,但若有返回值,则会发生页面跳转,页面显示值为javascript后数据:
<a href="javascript:1" id="__sc_closeBtn" class="closeBtn" title="close">javascript:1</a>
<a href="javascript:'test is ok'" id="__sc_closeBtn" class="closeBtn" title="close">javascript:'test is ok'</a>
这个不会发生跳转,但是会弹出提示框:
<a href="javascript:alert(2)" id="__sc_closeBtn" class="closeBtn" title="close">javascript:alert(2)</a>
当我们利用<a>标签不是为了页面跳转,而是为了屏蔽页面跳转,那么void函数就派上用场了:
<a href="javascript:void 0" id="__sc_closeBtn" class="closeBtn" title="close">javascript:void 0</a>
实际上,void不使用挎号也完全是可行的,使用括号是为了让代码编写得更规范。
void后接任何合法的javascript代码,均能达到不返回值、页面不跳转的效果,但显然 void 0 是最简洁的写法。
注意:
如果是表达式,则需要加上括号:
<a href="javascript:void 9+19" id="__sc_closeBtn" class="closeBtn" title="close">javascript:void 9+19</a>
<a href="javascript:void (9+19)" id="__sc_closeBtn" class="closeBtn" title="close">javascript:void(9+19)</a>
<a href="javascript:void eval(9+19)" id="__sc_closeBtn" class="closeBtn" title="close">javascript:void eval(9+19)</a>
第1个返回NaN,第2、3个不返回值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 函数参数默认值的作用域问题
- ssm项目session使用及其作用域问题
- 过滤器作用范围/和/*引发的安全问题
- Spring中事务配置以及事务不起作用可能出现的问题
- 拯救react的hooks:react的问题和hooks的作用
- Druid 1.1.5 修复 testWhileIdle 某些场景不起作用的问题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图论——一个迷人的世界
本杰明,查特兰,张萍 / 机械工业出版社 / 2001-1-1
本书介绍了图论的基本概念,解释了图论中各种经典问题。例如,熄灯的问题、小生成树问题、哥尼斯堡七桥问题、中国邮递员问题、国际象棋中马的遍历问题和路的着色问题等等。书中也给出了各种类型的图,例如,二部图、欧拉图、彼得森图和树;等等。每一章都为读者设置了练习题,包含了具有挑战性的探索性问题。一起来看看 《图论——一个迷人的世界》 这本书的介绍吧!
正则表达式在线测试
正则表达式在线测试
RGB CMYK 转换工具
RGB CMYK 互转工具