Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:修改字符串';s[[PrimitiveValue]]使用;这";_Javascript - Fatal编程技术网

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

Javascript:修改字符串';s[[PrimitiveValue]]使用;这";,javascript,Javascript,我遇到了一个需要熟悉JavaScript原语的人的情况 问题:我想扩展字符串并添加一个名为“extract”的函数,该函数与“substr”类似,但在返回子字符串的过程中,它也会从原始字符串中删除子字符串 举个例子,下面的方法不起作用 if (!String.prototype.extract) { String.prototype.extract = function (delimiter) { var copyStr = ""; var i = this.indexOf(

我遇到了一个需要熟悉JavaScript原语的人的情况

问题:我想扩展字符串并添加一个名为“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;
  }
}
有什么想法吗

谢谢

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


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

对。但是,所有基本体包装器都有[[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;
}