Javascript trim():意外行为

Javascript trim():意外行为,javascript,Javascript,如下图所示,trim()函数出现意外行为,因为它正在剥离a 这段代码是javascript文件的一部分,我在许多项目中都没有遇到问题,但现在我的一个客户机正面临这个问题。可悲的是,我无法访问源代码项目客户端 问题 是否可以覆盖本机trim()的实现 Javascript中的函数 这种行为的原因可能是什么 在常规浏览器中尝试您的代码,表明它按预期工作- 可以在JavaScript中重写本机trim()函数的实现吗? 是的,这是可能的,但这被认为是一种不好的做法。 我将展示如何做到这一点,因为我认

如下图所示,
trim()
函数出现意外行为,因为它正在剥离
a

这段代码是javascript文件的一部分,我在许多项目中都没有遇到问题,但现在我的一个客户机正面临这个问题。可悲的是,我无法访问源代码项目客户端

问题
  • 是否可以覆盖本机trim()的实现 Javascript中的函数
  • 这种行为的原因可能是什么

  • 在常规浏览器中尝试您的代码,表明它按预期工作-

    可以在JavaScript中重写本机trim()函数的实现吗? 是的,这是可能的,但这被认为是一种不好的做法。 我将展示如何做到这一点,因为我认为代码已经覆盖了它。 以下是如何做到这一点:

    String.prototype.trim = x => console.log('trim override');
    'olá'.trim(); // trim override
    
    这种行为的原因可能是什么? 除非它在意外的环境中运行,否则很可能原始作者已将
    trim
    重写为与本机实现不同的内容。我建议您尝试将带有原始实现的polyfill粘贴到控制台中,并检查使用它运行是否可以解决问题

    以下是polyfill:

    String.prototype.trim = function () {
      return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
    };
    console.log('olá'.trim());
    

    如果此代码的输出为您提供了正确的结果(而不是修剪
    á
    ),则您发现了问题。

    您在哪里运行此操作?我在chrome、firefox和Node.js中尝试过,它似乎对我有用。在chrome
    “olá”.trim()中不可复制。顺便说一句,可以覆盖
    字符串.prototype.trim
    方法,但这是非常不鼓励的-。也许这就是这里发生的事情,而原作者就是这么做的,这正是你不应该这么做的原因=>'Hello'
    使用
    trim
    时仅返回
    Hello
    。是否可以尝试在trim之前添加以下代码:
    String.prototype.trim=function(){返回此值。替换(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g',);}-它填充了正确的“修剪”功能,这对我很有用。如果它与此一起工作,你知道你有一个不好的修剪出于某种原因。我建议你弄清楚polyfill是在哪里和为什么制作的,并从根部修复它。如果他们想要这种行为,这可能会破坏现有的代码。