Javascript:修改字符串';s[[PrimitiveValue]]使用;这";
我遇到了一个需要熟悉JavaScript原语的人的情况 问题:我想扩展字符串并添加一个名为“extract”的函数,该函数与“substr”类似,但在返回子字符串的过程中,它也会从原始字符串中删除子字符串 举个例子,下面的方法不起作用Javascript:修改字符串';s[[PrimitiveValue]]使用;这";,javascript,Javascript,我遇到了一个需要熟悉JavaScript原语的人的情况 问题:我想扩展字符串并添加一个名为“extract”的函数,该函数与“substr”类似,但在返回子字符串的过程中,它也会从原始字符串中删除子字符串 举个例子,下面的方法不起作用 if (!String.prototype.extract) { String.prototype.extract = function (delimiter) { var copyStr = ""; var i = this.indexOf(
if (!String.prototype.extract) {
String.prototype.extract = function (delimiter) {
var copyStr = "";
var i = this.indexOf(delimiter);
if (i >= 0) {
copyStr = this.substr(0, i);
console.log(this); <<-- "String"
//This line doesn't work, don't know what [[PrimitiveValue]] is.
this.[[PrimitiveValue]] = this.replace(copyStr + delimiter,"");
// Nor this line works. Can't modify 'this'
this = this.replace(copyStr + delimiter, "");
}
return copyStr;
}
}
有什么想法吗
谢谢
但是在返回子字符串的过程中,它也会从原始字符串中删除子字符串
字符串是不可变的,这意味着它们的值不能以任何方式修改。对。但是,所有基本体包装器都有[[PrimitiveValue]],可以通过“valueOf()”函数访问原始数据。如果我们能得到原始值,我只是想有一种方法可以写回它。不,没有:)规范没有指定任何方法在对象初始化后更改内部插槽。@FelixKling如果你能给出一个关于规范的链接,那就太酷了:)没有真正的方法,正如菲利克斯·克林在他的回答中已经提到的那样。最好的选择可能是将这两个值打包到一个返回对象中。大概是这样的:
var str = "abcdef";
var str2 = str.extract('c');
console.log(str); <<-- this should be 'def'
console.log(str2); <<-- this should be 'abc'
function extractSubString(originalStr, delimiter) {
var copyStr = "";
var i = originalStr.indexOf(delimiter);
if (i >= 0) {
copyStr = originalStr.substr(0, i);
originalStr = original.replace(copyStr + delimiter, "");
}
return copyStr;
}