3 ms·
What if `weAreConnected` is `null` or `undefined`? WalterSear's solution solves the issue since both `null` and `undefined` would become `false`: this.set
by vmarsy 9y ago
What if `weAreConnected` is `null` or `undefined`?
WalterSear's solution solves the issue since both `null` and `undefined` would become `false`:
this.setState({
isConnected: Boolean(weAreConnected)
})
but in your case you could set `isConnected` to `null` or `undefined`
so if later in code someone makes the mistake of writing:
if (this.state.isConnected === false) { /* do stuff */ }
they could have a bad surprise.
- debaserab2 9y agothis.setState({ isConnected: !!weAreConnected })
- hypervis0r 9y agoThis^, plus, you shouldn't really have "null" or "undefined" variables which you treat as bool (if you do, then that's a bug)
- DeonPenny 9y agoDing ding ding right answer. This is the way most senior javascript devs would right it.
- corn13read 9y agoThey'd right it if they were fixing it or write it if they were writing it ;)
- Rockslide 9y agoIt certainly doesn't hurt to "cast" the input to boolean. But your second example is the next code smell, because it should just be if (!this.state.isConnected) { /* do stuff */ } (which still works as expected even when dealing with null or undefined).
- vmarsy 9y agoAgreed, but you can't anticipate what another dev could write :) Or if you pass down that `isConnected` down to a library where for some reason they assumed `null` should default to `true` Of course it's very unlikely, but my point is you can't know all use cases of `this.state.isConnected` in advance on a large project so as you say it doesn't hurt to sanitize the input.
- mikeycgto 9y agoThat's why there's PropTypes so you can define what type a given prop should be. An error is raised if a higher level component passes in a prop of an incorrect type.
- maxxxxx 9y agothis.setState({ isConnected: (weAreConnected === true) }) seems 100% equivalent
- xamuel 9y agoAnother flavor of this surprise: JSON.stringify doesn't "see" undefined. JSON.stringify({foo:undefined}) returns "{}" :)
- oceanswave 9y agoBecause type (prototype) and data (Json) are two different things, if you need it -- JSON.stringify(obj, (k, v) => v === undefined ? null : v);