and, as previously mentioned, `!obj.x` might have side effects through the
accessor, as example in every lazily defined property that would be early
defined (or anything else behind a getter that could do more than just
telling the property is there and it's not truthy).

I have mixed feelings about `!in` and I also wonder if something like
`const not = $ => !$;` would make checks look nicer: `if (not('x' in obj))
{ ... }`

but that's not really a syntax shortcut, isn't it? Probably a `ni` would be
better, as new *not in* relational operator? I wouldn't like `notIn` or
`notin` much, but I might use it anyway.



On Tue, Jul 10, 2018 at 6:14 AM Jordan Harband <ljh...@gmail.com> wrote:

> `!obj.x` will return true for any falsy property - null, undefined,
> positive or negative zero, NaN, and the empty string. `!(x in obj)` will
> return true only if `x` is not an own property on `obj` nor anything in its
> prototype chain. They are decidedly different tests and they check for
> decidedly different things.
>
> On Mon, Jul 9, 2018 at 9:08 PM, Naveen Chawla <naveen.c...@gmail.com>
> wrote:
>
>> I don't use `in`.
>>
>> What do I get with `'x' !in obj` or `!(x in obj)` that I don't get with
>> !obj['x'] ?
>>
>> Genuinely asking - I don't know what I am missing.
>>
>> I use obj[x] because I believe it's a more familiar syntax and I believe
>> I get the same outcome..(?)..
>>
>> On Mon, 9 Jul 2018 at 22:41 Steve Fink <sph...@gmail.com> wrote:
>>
>>> +1 from me for !in. It's a surprisingly common nuisance.
>>>
>>> And I don't care for the !obj.x workaround at all -- even if you can
>>> survive the difference in semantics, from a code reading point of view this
>>> is saying something entirely different.
>>>
>>> And it is very different semantically. 'x' in obj does [[HasProperty]];
>>> obj.x does [[GetProperty]]. With
>>>
>>>   obj = { get x() { print("getter"); return 3; } };
>>>
>>> then |"x" in obj| does not print "getter" while |obj.x| does.
>>>
>>>
>>> On 06/29/2018 12:26 AM, Cyril Auburtin wrote:
>>>
>>>
>>> ```js
>>> if (!obj.x && !obj.y) {
>>>      doit()
>>> }
>>> ```
>>> The cases where they are equal to 0, '', null, undefined shouldn't
>>> matter imo, if for example those x and y are numbers, they would be
>>> defined, defaulted to 0, and you would test for `!== 0` rather if needed
>>>
>>> Le jeu. 28 juin 2018 à 18:31, Guylian Cox <guylian...@gmail.com> a
>>> écrit :
>>>
>>>> I agree, it's very annoying to have to write it !(x in y). I've been
>>>> wanting this operator for a very, very long time.
>>>>
>>>> If there is interest for !in, I think !instanceof deserves to be
>>>> included too.
>>>>
>>>> Le jeu. 28 juin 2018 à 18:19, T.J. Crowder <
>>>> tj.crow...@farsightsoftware.com> a écrit :
>>>>
>>>>> On Thu, Jun 28, 2018 at 5:14 PM, Tobias Buschor <
>>>>> tobias.busc...@shwups.ch> wrote:
>>>>> > I dont like to write:
>>>>> > if ( !('x' in obj) &&  !('y' in obj) ) {
>>>>> >      doit()
>>>>> > }
>>>>> >
>>>>> > I was even tempted to write it that way:
>>>>> > if ('x' in obj  ||  'y' in obj) { } else {
>>>>> >      doit()
>>>>> > }
>>>>>
>>>>> There's
>>>>>
>>>>> ```js
>>>>> if (!('x' in obj  ||  'y' in obj)) {
>>>>>      doit()
>>>>> }
>>>>> ```
>>>>>
>>>>> That said, I've wanted !in many a time, in a minor sort of way...
>>>>>
>>>>> -- T.J. Crowder
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> es-discuss@mozilla.org
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss@mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing 
>>> listes-discuss@mozilla.orghttps://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to