Javascript:修改字符串's[[PrimitiveValue]]使用“;这个“;

Javascript: modify String's [[PrimitiveValue]] using "this"

本文关键字:PrimitiveValue 这个 使用 字符串 修改 Javascript      更新时间:2023-09-26

我遇到了一个需要对JavaScript原语有深入了解的人的情况。

问题:我想扩展String并添加一个名为"extract"的函数,该函数与"substr"一样,但在返回子字符串的过程中,它也会从原始字符串中删除子字符串。

举个例子,以下内容不起作用。

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;
  }
}

然后我可以这样打电话:

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;
}

有什么想法吗?

谢谢。

但是在返回子字符串的过程中,它也会从原始字符串中删除子字符串。

字符串是不可变的,这意味着它们的值不能以任何方式修改。