String.prototype.replace() problems with JSON.stringify() and serialization of Objects

Christoph Martens cmartensms at
Mon Jul 28 22:29:22 PDT 2014

On 28.07.2014 17:24, Rick Waldron wrote:
> On Mon, Jul 28, 2014 at 11:16 AM, Boris Zbarsky <bzbarsky at 
> <mailto:bzbarsky at>> wrote:
>     On 7/28/14, 11:09 AM, Rick Waldron wrote:
>          var y = x.replace('{{blob}}', function() {
>              return data;
>            });
>     In fairness, that's the sort of thing that gives off a "WAT
>     smell". Code like this without a comment that explains the
>     indirection is just asking someone to "simplify" it, breaking it
>     in the process...
> I don't disagree with your feedback, but JS has had special semantics 
> for "$" (with ' or n) character in the replaceValue since ES3 (just 
> short of 15 years). I didn't say that the solution was obvious, just 
> that it required familiarity ;)
> Rick
> _______________________________________________
> es-discuss mailing list
> es-discuss at

Hey Rick,

To be honest, I didn't know the trick with the dummy filter function 
returning the plain data. I expected that it was executed each time a 
match was found (similar to Array filter functions).

I think for external guys writing JavaScript, the WAT effect is pretty 
huge. Either we should change the behaviour of the parameters (which is 
bad for legacy implementations) or the flags to disable it optionally.

As I wasn't familiar with the replace behaviour before, I would expect 
the method to behave differently, depending on the arguments:

replace(regexp, string) -> parse string and see if $ is in there
replace(regexp, callback) -> callback is called each time regexp is matched
replace(string, callback) -> only called once
replace(string, string) -> called one time, using the first indexOf and 
replacing it


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list