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

Sim*_*lGy 3 javascript arrays

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

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

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

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

小智 5

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

  • 谢谢解释,有道理。也解释了为什么我可以直接使用`slice`,因为它不会修改原始对象。 (2认同)