下面这段JS代码,什么语法检测工具可以发现错在哪里?
发布于 6 年前 作者 chapgaga 5991 次浏览 来自 问答
var asdfsdf = {
	sdfsdf: [
		['aaaaa', 'aaaaa'],
		['adsfsadf', 'wfwfwef'],
		['--sdf-','asdfasdf">asdfsadfsdf>'],
		['afds'],
		['asdf'],
		['sfdaf'],
		['adf',['adsf','sdf','asdf'], 'sdf:sdf']
		['-df--'],
		['sfd', 'dsf:sdf'],
	]
};

[‘adf’,[‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’] 这句后门的逗号没写,但是jshint语法检测为何没有报错?

jshint检测通过 [JSHint: D:\workspace\test.js] ✓ 0 errors, [esc] to hide. [Finished in 0.3s]

17 回复

用webstorm也没报错,奇怪了

eslint应该能检测出来

[][a]是不会报错的,他会认为是对象的a属性,语法上是没问题的,这是对象取值的方法,你这个最后得到的应该是undefined, 你试着把’-df–'换成’length’试试,然后应该就知道了

语法没有错, eslint 会检测到异常的换行

message: 'Unexpected newline between object and [ of property access. (no-unexpected-multiline)'

image.png vscode with eslint

@StephenKingg vscode速度有sublime快么?sublime添加了很多项目,速度没有慢下来

@ekoneko [‘adf’,[‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’] [’-df–’], 少了逗号,语法没错?

@linliny 是嵌套多维数组,没有用到[][a]结构啊

[,(,+,-,/这五个符号如果出现在开头,而上一条语句结尾没有分号,则这两条语句将会被解析成一条语句,也就是[‘adf’,[‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’][’-df–’],这个并没有错啊,只是值是undefined

从语法上确实没错啊。。。。谁让 js 支持这么多种写法,这下懵比了吧

数组的数组 确实从语法上是没有错误的

多维矩阵,没错啊

@ekoneko 数组元素之间没有逗号,语法应该报错才对啊

@zhaixiaowai 应该是多层数组嵌套,元素之间应该用逗号分隔,没有逗号,应该检测出错误,可是jshiint为何检测不出?

@fruit-memory 没发现少了一个逗号么?

[‘sfdaf’], [‘adf’,[‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’] [’-df–’],

[‘sfdaf’],
[‘adf’,[‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’]
[’-df–’],
// ----------
// 把  [‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’] 换成一个变量来看
var  arr = [‘adsf’,‘sdf’,‘asdf’], ‘sdf:sdf’]
[
  [‘sfdaf’],
  [‘adf’, arr[’-df–’],
]

你觉得js解析引擎会觉得你那是两个数组吗? 而不是取这个对象的值吗?

[‘a’,‘b’][‘1’]===‘b’

回到顶部