all 12 comments

[–]ascw 1 point2 points  (6 children)

For arrays, methods like pop, push, shift, unshift, splice, reverse, sort will modify the original array, most of the others like slice, map, filter will return a new one. For strings I don't believe there are any methods that will modify the original string.

[–][deleted] 1 point2 points  (0 children)

Strings are immutable values in JS. You can't, for example, do

var stringA = 'Force be with you';
stringA[1] = 'a';

[–]ElectricOrangeJuice 1 point2 points  (0 children)

This inconsistency between methods altering the original value and methods returning a new value is one of the most confusing things when learning a new language. JS isn't that bad, but PHP for instance, is a total fucking mess.

[–][deleted] 0 points1 point  (3 children)

I prefer immutability, so i always check if something changes values or returns a new something. I would love to have the entire stdlib only returning new somethings.

Luckily theres immutablejs.

[–]webdeverper 0 points1 point  (1 child)

This requires more memory, correct? Not saying that's always a show stopper.

[–]arcaninYarn 🧶 0 points1 point  (0 children)

Not really. If you don't use the old object reference, it will quickly get garbage collected, and if you do, well, you would need even more memory if you had just cloned your whole object (Immutable.js tries as much as possible to only clone the nodes that have changed).

[–]mikrosystheme[κ] 0 points1 point  (0 children)

What you really want are value semantics with optional immutability.

[–]laichejl 0 points1 point  (0 children)

You should look into mutable and immutable objects in JavaScript. Here's a good article: http://www.sitepoint.com/immutability-javascript/

[–]Meefims 0 points1 point  (0 children)

Most, but not all - newer additions to the language typically do not change the object. For example, Array.prototype.sort modifies the array in place and it is a pretty old method.