我可以在原型方法中修改字符串的内容吗?

时间:2019-05-16 02:36:52

标签: javascript node.js perl

perl有一个很棒的方法,称为chomp()。我可以做类似的事情:

$string.chomp()

,它将从末尾删除换行符。我想在Javascript中实现相同的功能,但无法弄清楚如何在原型定义中修改对象:

String.prototype.chomp = function() {
   this = this.replace(/\n$/, '')
}

我无法分配给this。如果我看的话,我发现this是带有键0的对象,所以我尝试了this[0] = this[0].replace(/\n$/, ''),但这也不起作用

我可以使用对象进行此操作

Object.prototype.chomp = function() {
   Object.keys(this).forEach(k => this[k] = this[k].replace(/\n$/, ''))
}

但是我不能为单个字符串做到这一点。我能做些魔术吗?

2 个答案:

答案 0 :(得分:2)

字符串是不可变的。您必须将chomp的结果重新分配给新字符串:

String.prototype.chomp = function() {
  return this.replace(/\n$/, '')
};

const foo = `foo
`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);

如果您要从字符串末尾删除 all 个换行符,请用\n重复+

String.prototype.chomp = function() {
  return this.replace(/\n+$/, '')
};

const foo = `foo



`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);

答案 1 :(得分:0)

JavaScript具有trimtrimStarttrimEnd,它们应该可以满足您的需求

  

trim()方法从字符串的两端删除空格。在这种情况下,空白是所有空白字符(空格,制表符,不间断空格等)和所有行终止符(LF,CR等)。

const str = `
foo
bar


`;


console.log(JSON.stringify(str))
console.log(JSON.stringify(str.trimEnd()))