<div><div dir="auto">Thanks interesting, I hadn’t realized it was possible to “trap” the in operator using Proxy. I may be wrong, but I don’t think Proxy is capable of operating on the prototype chain. Specifically, I don’t think you can change the behavior of the in operator for all Strings (which I’m sure many would prefer).</div><div dir="auto"><br></div><div dir="auto">If this Symbol were seriously considered I believe it would expand the meaning of the in operator as you’re correct, this is definitely not it’s current intention.</div></div><div dir="auto"><br></div><div dir="auto">Tom</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 9, 2019 at 4:39 PM Claude Pache <<a href="mailto:claude.pache@gmail.com">claude.pache@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"></div><div dir="auto"><div dir="ltr"></div><div dir="ltr"><br></div><div dir="ltr"><br>Le 9 mai 2019 à 20:52, Tom Barrasso <<a href="mailto:tom@barrasso.me" target="_blank">tom@barrasso.me</a>> a écrit :<br><br></div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><div class="gmail_default" style="color:rgb(80,0,80)">Like <span style="background-color:rgb(245,245,245);color:rgb(51,51,51);font-family:Menlo,Monaco,Consolas,"Courier New",monospace;white-space:pre-wrap">Symbol.hasInstance</span> but for the "in" operator.<br>This symbol would work for both native and user-defined objects.</div><div class="gmail_default" style="color:rgb(80,0,80)"><br></div><div class="gmail_default" style="color:rgb(80,0,80)"><b>*Example implementation*</b> prototyping native object:</div><div class="gmail_default" style="color:rgb(80,0,80)"><br></div><div class="gmail_default" style="color:rgb(80,0,80)"><pre style="white-space:pre-wrap;box-sizing:border-box;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:6.5px;margin-top:0px;margin-bottom:11px;line-height:20px;word-break:break-all;color:rgb(51,51,51);background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px">```js
String.prototype[Symbol.inObject] =
  function(searchString) {
    return this.includes(searchString)
}
```</pre></div><div class="gmail_default" style="color:rgb(80,0,80)"><br><b>*Example implementation* </b>for user-defined object:</div><div class="gmail_default" style="color:rgb(80,0,80)"><br></div><div class="gmail_default" style="color:rgb(80,0,80)"><pre style="white-space:pre-wrap;box-sizing:border-box;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:6.5px;margin-top:0px;margin-bottom:11px;line-height:20px;word-break:break-all;color:rgb(51,51,51);background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px">```js
function range(min, max) => ({
    [Symbol.inObject]: (prop) => {
        return (prop >= min && prop <= max)
    }
})
```</pre><br></div><div class="gmail_default" style="color:rgb(80,0,80)"><b>*Example usage*</b>:</div><div class="gmail_default" style="color:rgb(80,0,80)"><br><pre style="white-space:pre-wrap;box-sizing:border-box;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:6.5px;margin-top:0px;margin-bottom:11px;line-height:20px;word-break:break-all;color:rgb(51,51,51);background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px">```js
("foo" in "food")    // true
(14 in range(1, 25)) // true
```</pre></div></div></div>
</div></blockquote><div><br></div></div><div dir="auto">Those two examples seem to give to the `in` operator a meaning that it was not intended to have. The `in` operator is specifically meant to check whether a given property exists in a given object.<div><br></div><div>Also, there already exists a way to customise the behaviour of the `in` operator, namely by using a Proxy.</div></div><div dir="auto"><div><div><div><br></div></div></div><div>—Claude</div></div></blockquote></div></div>