为什么我不能``.call`在字符串上的Array.prototype.splice?

时间:2014-06-02 03:48:09

标签: javascript arrays

我知道我可以并且可能应该使用substring:)

出于教育原因,我想知道为什么我不能使用call对字符串进行拼接操作,我理解这是一个类似数组的对象。看起来这应该有效:

Array.prototype.splice.call('filename.jpg', -3, 3).join(''); // return the last three chars

在V8中引发错误TypeError: Object.isSealed called on non-object

2 个答案:

答案 0 :(得分:4)

在Javascript中,字符串是不可变的;它们在创建后无法更改。所以没有“set char”或“splice”方法,因为无法更改字符串。但是,您可以在其上调用split('')将其转换为数组,这样您就可以使用'filename.jpg'.split('').splice(-3, 3).join('')获得相同的效果。

答案 1 :(得分:2)

您需要先将其转换为数组对象

Array.prototype.splice.call('filename.jpg'.split(''), -3, 3).join('');