Gentleman: So, just use that package :-
Mcnicoll: S34n: why do you want to know if something is a regular expression, though?
Yoshihara: S34n: most likely you’re just calling .test on it. It’s best to just check if something has a .test method
Reineck: Gentleman: what scenarios would make that an unreliable check?
Badenoch: That way you also let people p*** things that have a .test method but isn’t a RegExp object, allowing them to have more useful behaviour in their .test if they need to
Gentleman: Zomg: instanceof doesn’t work across iframes, or if the “constructor” property has been modified
Reineck: Hylle: if it was all of them, then it wouldn’t work at all.
Osso: Zomg: a instanceof b is literally bSymbol.hasInstancea
Reineck: Gentleman: so seems again like a thing that would be a thing only if someone is doing something dumb 😛
Patao: You can change Symbol.hasInstance for anything. And then there’s code realms
Reineck: This goes back to the whole “wrap everything in an IIFE in case someone redeclares undefined”
Reineck: Which is not really a thing but it could be!
Barnwell: Zomg: no, you can actually get objects from different code realms interacting between each other. And it *should* work.
Gentleman: Zomg: it’s javascript. everybody is doing *something* dumb.
Brandi: The “doing something dumb” here would be checking instanceof, which makes it not work 😛
Reineck: Someone suddenly breaking the instanceof check by redefining constructor seems about equally likely as someone breaking your library
Fiume: Zomg: again, code realms.
Berver: Zomg: http://www.ecma-international.org/ecma-262/6.0/#sec-code-realms
Reineck: So how does this actually affect things?
Gentleman: If something comes from an iframe and you want to check it
Gentleman: Or in node, from the “vm” module
Gentleman: Which is not “something dumb” as much as its “something that should still work”
Koncan: But now it breaks because you’re using instanceof
Reineck: You should just say that instead of random things like CODE REALMS
Gentleman: That’s what it’s called in the spec
Gentleman: It’s not a random thing, it’s the proper name.
Reineck: First time I heard of it
Gentleman: That’s more on you than us :-p
Vermeulen: People keep saying not to use instanceof b/c of iframes, but honestly, how often are you really transferring objects across realms and typechecking them
Reineck: STRML: we actually have some stuff with iframes that could in theory have that issue, but we don’t do that sorta typechecking anyway
Mellor: As JS environments try to give you more possibilities of isolating/sandboxing code, you’re soon going to have lots of realms interacting with each other.
Gentleman: STRML: you might need to refactor to iframes for PCI compliance for payments stuff and if you use instanceof, it would break
Gentleman: STRML: so, pretty often, since everyone working with money likely needs to do that eventually
Czyrnik: Well. depends so much on your applications.
Raguso: STRML: iframes aren’t the only thing that have a different Realm of execution :
Biffle: In any case, Object.prototype.toString.call is my general goto. aka _.isRegExp
Gentleman: STRML: right but Object#toString is unreliable in ES6.
Kiefel: STRML: that breaks in ES6 too
Pensinger: Really, that’s changed?
Gentleman: And my is-regexp module is more robust than _.isRegExp, which is why i made it.
Ebbert: STRML: you can now change the Cl*** of anything
Gentleman: Now it’s called the toStringTag
Stemm: Which means you can only really determine an object’s type through a duck test.