在 JavaScript 中,我想知道为什么我可以这样做:
[].slice.apply([1,2,3], [0, 2]) // returns [1, 2]
据我所知,这相当于:
Array.prototype.slice.apply([1,2,3], [0, 2]); // returns [1, 2]
但我不能这样做:
{}.hasOwnProperty.apply(a, ['a']);
这将允许不输入这么长的行:
Object.prototype.hasOwnProperty.apply(a, ['a']); // returns true or false
嗯,当我这样做时,我也发现我实际上可以做到所有这些:
''.indexOf.apply('asdasd', ['s']); // returns 1
true.toString.apply(true); // returns // "true" as string
{} 是怎么回事? :-) 为什么它很特别?
最佳答案
hasOwnProperty('a')
是拼写错误吗?
{}.hasOwnProperty.apply(a, ['a']);
但是,由于 JavaScript 将 {}
解释为 block 分隔符,因此这不太有效。只需添加括号:
({}).hasOwnProperty.apply(a, ['a']);
检查一下:
> var a = {'a': 1}
Object
> {}.hasOwnProperty.apply(a, ['a']);
SyntaxError: Unexpected token .
> ({}).hasOwnProperty.apply(a, ['a']);
true
关于javascript - 数组字面量方法调用和对象字面量方法调用的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286125/