[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 ...
随机推荐
- 执行npm run build之后显示空白页面
最近在学习使用webpack,在项目最后打包过程,执行npm run build之后得到的dist目录放到服务器上打开,显示空白页面,但是标题能正常显示,查看控制台发现是数据位置请求报错,查阅资料后知 ...
- Jmeter5 实现多机集群压测(局域网组成多机集群)
想要模拟高并发用户访问的场景,用Jmeter5实现的话,单靠一台PC机,资源是不够的,包括单机的内存.使用端口数量等,所以最好是通过多台PC机组成几个集群来对服务器进行压测. 本文目录: 1.软硬件配 ...
- python网络编程(五)
udp广播 #coding=utf-8 import socket, sys dest = ('<broadcast>', 7788) # 创建udp套接字 s = socket.sock ...
- sublime text3中emmet插件的使用
首先,想要快速编码需 要在编辑器中安装常用插件,下面是emmet插件的使用: html5文档结构的生成方式: 1).!+tab键 2).html:5 +tab键 头部head中meta字符集的生成: ...
- Stack的源码分析和应用实例
1.Stack介绍 Stack是栈.它的特性是:先进后出(FILO:First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实 ...
- sencha touch - sass 使用
需要安装: 1.ruby 2.sass (3.2.12 ) 3.compass (0.12.2) sencha cmd 4以上版本 安装的sass compass 必须为以上版本,否则编译会出错 目 ...
- line-height 设置为 1
https://stackoverflow.com/questions/1000398/what-is-line-height1 If no unit is supplied e.g. " ...
- SharePoint JavaScript 更新用户和组字段
前言 最近,需要更新列表字段,字段的类型是用户和组,so写了这么一段代码 function updateUserField(){ var ctx = new SP.ClientContext.get_ ...
- mysql select into 不支持
不支持的 select * into order_new from orders 改为 Create table order_new(select * from orders)
- 通过IIS操作修改服务器文件没有权限的解决办法
问题描述:通过部署在IIS上的程序去操做文件(比如删除.旋转图片等)时,在本地执行没有问题,但是部署到服务器上提示“没有权限”.解决方法:找到你需要操作的文件的根文件夹,右键点击属性 选择“安全”选项 ...