[Z] 从Uncaught SyntaxError: Unexpected token ")" 问题看javascript:void的作用
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个不返回值。
[Z] 从Uncaught SyntaxError: Unexpected token ")" 问题看javascript:void的作用的更多相关文章
- 关于Uncaught SyntaxError: Unexpected token o in JSON at position 1,chrome持续报错的相关解析
今天跟大家分享我前两天遇见的一个BUG,说出来很难受,因为这个BUG花了我一个多小时去找原因,后来莫名其妙的故障消失了,强迫症犯了的我,居然花了2个多小时去故意再制造这个BUG,只想弄明白WHY??? ...
- json格式字符串用Uncaught SyntaxError: Unexpected token ' Uncaught SyntaxError: Unexpected number
Unexpected number(index)的错误用的json字符串如 var jsonStr = "{1:'北京note备注信息',2:'上海note备注信息',3:'广东note备注 ...
- Uncaught SyntaxError: Unexpected token ' in JSON at position 1
听说js是一样很BT的语言,今天真是有点领教到了. 用python3.6+django2.0开发网站时,遇到了一个坑中之坑! 在异步数据提交Ajax的运用中,不免在回调函数中使用到JSON.parse ...
- 【shiro】使用shiro搭建的项目,页面引用js,报错:Uncaught SyntaxError: Unexpected token <
使用shiro搭建项目过程中,总是出现登录页面 登录第一次有效果,登陆第二次出现302状态码,第三次又有效果,第四次又没有效果的局面. 因此,采用ajax提交页面登录的用户名和密码,但是在引用js的过 ...
- 【转】Vue项目报错:Uncaught SyntaxError: Unexpected token <
这篇文章主要介绍了Vue项目报错:Uncaught SyntaxError: Unexpected token <,在引入第三方依赖的 JS 文件时,遇到的一个问题,小编觉得挺不错的,现在分享给 ...
- uncaught syntaxerror unexpected token U JSON
uncaught syntaxerror unexpected token U JSON The parameter for the JSON.parse may be returning nothi ...
- 【Vue中的坑】Vue打包上传线上报Uncaught SyntaxError: Unexpected token <
今天在vue打包上传线上后,报一下错误,一下就懵了,这可咋整啊,一如既往的想都没想就开始复制错误,上网开搜 Uncaught SyntaxError: Unexpected token < Un ...
- js Uncaught SyntaxError: Unexpected token错误
今天遇到js报错Uncaught SyntaxError: Unexpected token 不知道是什么原因,并且js还会继续往下执行. 经过排查竟然是在保存行的上面有个if少一个大括号,真是坑爹啊 ...
- JS错误:Uncaught SyntaxError: Unexpected token ILLEGAL
$('tbody', '#' + tableId).append('<tr onmouseover="this.style.backgroundColor=\'#eeeeee\'&qu ...
随机推荐
- Java笔记(二)类
类 一.类的基础 1.类---一种自定义数据类型. 2.与方法内创建局部变量不同,在创建对象的时候,所有的实例变量都会分配 一个默认值,这与创建数组的时候是类似的. 3.在{}对实例变量内赋值: in ...
- 2046 ACM 数学
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046 思维:与之前有两道题目相似,n可以由n-1和n-2递推过来.f(n)=f(n-1)*1+f(n-2) ...
- 2110 ACM Crisis of HDU 母函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2110 题意:分出1/3的价值,有几种可能? 思路:母函数 与之前的题目2079相似,复习笔记再来写代码: ...
- Visual Studio VS使用freopen调试控制台闪退
解决方法 freopen("CON", "r", stdin); system("pause>nul"); 暂停函数之前,使用f ...
- OpenXC : Any updates on plans for IOS?
OpenXC : Any updates on plans for IOS? Hi Thomas, We're actively investigating this as we'd love to ...
- 使用Qemu运行Ubuntu文件系统(1)
参考 https://blog.csdn.net/mountzf/article/details/51707853 https://blog.csdn.net/stephen_lu_fahai/art ...
- C# GDI+绘图 z
一.坐标系 坐标系是图形设计的基础.GDI+使用三个坐标空间:世界.页面和设备,其中,世界坐标是用于建立特殊图形世界模型的坐标系,也是在.NET Framework中传递给方法的坐标系.而页面坐标系是 ...
- 开源GIS浅谈 【转】
http://blog.csdn.net/happyduoduo1/article/details/51773850 谈到GIS软件,首先让我们想到的是GIS界的龙头大哥ESRI公司旗下的ArcGIS ...
- VUE温习:style层次分析
一.vue样式style层次分析 1.样式可以在main.js.模块js文件.组件style.组件script标签内,index.html文件内引入,不同位置引入的样式有什么关系. 2.总结: (1) ...
- Python3爬虫实例 代理的使用
现在爬虫越来越难了,一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问. 所以我们需要设置一些代理服 ...