Re: Object.equals() and Object.clone()

2016-11-20 Thread Alexander Jones
Object has this unfortunate complication of prototypes, i.e.: ``` const objA = {foo: 1, bar: 2}; const objB = Object.create(objA); equals(objA, objB) === ? ``` And also there is metadata on each property that can vary (one object has a property which is configurable, and the other has the same

RE: Object.equals() and Object.clone()

2016-11-14 Thread Domenic Denicola
] On Behalf Of Kevin Barabash Sent: Monday, November 14, 2016 23:51 To: Eric Devine <devin...@gmail.com> Cc: es-discuss <es-discuss@mozilla.org> Subject: Re: Object.equals() and Object.clone() I didn't know about structured clone so I looked it up. It looks pretty promising. As

Re: Object.equals() and Object.clone()

2016-11-14 Thread Kevin Barabash
I didn't know about structured clone so I looked it up. It looks pretty promising. As for checking if two things are equal, maybe it makes sense for objects to define their own `.equals(other)` methods. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm

Re: Object.equals() and Object.clone()

2016-11-14 Thread Frankie Bagnardi
I guess it could throw if it's unable to clone something. This would include *any* class without `Symbol.clone`. The error messages would need to be outstanding for it to be practical. Like showing the path to the thing that can't be cloned and the name of the constructor. On Mon, Nov 14, 2016

Re: Object.equals() and Object.clone()

2016-11-14 Thread Michael Theriot
I think you'd definitely need to call the constructor for classes because of scoped variables (e.g. scoped weakmap for private properties). I would like a way to compare simple objects like identical arrays though. On Mon, Nov 14, 2016 at 7:58 PM, Frankie Bagnardi wrote:

Re: Object.equals() and Object.clone()

2016-11-14 Thread Eric Devine
How about beginning with the HTML structured clone algorithm, and a `Symbol.clone` property to allow an object to optionally define it's own cloning behavior? On Mon, Nov 14, 2016 at 9:02 PM, Isiah Meadows wrote: > I agree. Also, consider iterables. Should their

Re: Object.equals() and Object.clone()

2016-11-14 Thread Isiah Meadows
I agree. Also, consider iterables. Should their `Symbol.iterator` method be called? There's no obvious behavior for the details, and people's opinions differ on what should be correct. On Mon, Nov 14, 2016, 20:58 Frankie Bagnardi wrote: It's pretty hard to decide how these

Re: Object.equals() and Object.clone()

2016-11-14 Thread Frankie Bagnardi
It's pretty hard to decide how these behave, specifically with custom classes. Focusing on Object.clone... - with classes do you call the constructor, and with what arguments? - HTMLElement and sub classes can't be constructed directly, what happens with them? - do you copy internal properties?