函数引用后面的方括号代表什么意思?

4

我刚刚花了大约15分钟来调试一段JavaScript代码,结果发现问题出在我书写的代码上:

matches.push[[-1]];

替代

matches.push([[-1]]);

就像我所想的那样,其中matches是一个数组。有人可以解释一下为什么JavaScript在前面没有抛出语法错误,以及它的含义是什么吗?

3个回答

3

为什么

matches.push 是一个函数对象,你可以通过点表示法或方括号表示法访问对象属性和方法。基本上你正在请求push函数对象中不存在的内容,因此它返回undefined

enter image description here

注意

如果你像这样使用键为[-1]的语法,例如matches[[-1]] = "something",它也是有效的,但并不是你想要做的事情。


2
这只是一个属性访问器

var matches = [];
matches.push[1] = 'bla'
document.write(matches.push[1]);

基本上你需要做以下事情:
matches.push[[-1]]; 

解析为(方括号内的单个数字变成string),而对象的访问器是字符串
matches.push['-1']

这句话的意思是“并且解析为”。
undefined

因为属性'-1'未定义。

哦哈..!有趣...得在控制台上检查一下... var matches = []; matches.push[2] = "two"; console.log(matches);<- [] // wtf..? - Redu
你正在给 matches.push 赋值,而不是 matches,请参考上面的 run code 示例。 - Nina Scholz
@ Nina Scholz:如果你这么说...我尊重你..!但是,拜托...var arr = [1,2,3,4]; arr.push["-4"] ; arr; <- [1,2,3,4] ...虚拟机忽略意味着它是有效的吗?然而,我还不明白为什么虚拟机没有抱怨。即使是真的,也绝对不应该使用这个功能。嗯,我想是这样。 - Redu
arr.push["-4"] 是一种访问方式,而不是赋值。 - Nina Scholz
让我们在聊天中继续这个讨论 - Nina Scholz
显示剩余3条评论

1
在 JavaScript 中,所有东西都是对象,包括函数。我想引擎只是参考了一个(不存在的)字段到 push 函数/对象。这导致了 undefined。

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