<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body 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">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>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><br></div></div></div><div>—Claude</div></body></html>