On Sun, Jan 1, 2012 at 12:45 PM, Axel Rauschmayer <a...@rauschma.de> wrote:

>     ({ define: typeof define === "function"
>>        ? define  // browser
>>        : function(F) { F(require,exports,module) } }).  // Node.js
>>    define(function (require, exports, module) {
>>        // Node.js module code goes here
>>    });
>>
>
> Ok, thanks for the example. Here the test
>   typeof define === 'function'
> is equivalent to
>   typeof window.define === 'function'
> Is this testing whether 'define' is "declared"?
>
>
> Yes.
>
> I thought that 'window' is built-in so window.foo can either have a value
> or be 'undefined', but window.foo can not be declared.
>
>
> Note: `window` does not exist on Node.js (and possibly other non-browser
> environments).
>
> Anyway, if this example illustrates your use case, then it is the
> important case in my opinion (dynamic function overloading, supporting
> multiple callers). (And I don't see how any dedicated operator can help.)
>
>
> If there was an operator `exists`, the following two expressions would be
> equivalent. I prefer the latter expression, because it is more explicit.
>
>      typeof define === "function"
>      exists define && define instanceof Function
>
> The exists operator would work as follows (slightly edited from a previous
> email):
>
>     console.log(exists globalUnknown); // false
>

Same as...
  ( "globalUnknown" in this )      // anywhere
  ( "globalUnknown" in window ) // browser
  ( "globalUnknown" in global )   // node
  ( "globalUnknown" in self )      // workerglobalscope

But this is _so_ common that it might warrant an upgrade


>
>     // undefined and null in several variations
>
>     var myvar;
>     console.log(exists myvar); // false
>

"exists" is misleading here, "myvar" does exist - you just initialized it,
but did not assign a value. If  I've understood 12.2 correctly, "myvar"
definitely "exists"


>
>     console.log(exists undefined); // false
>
    console.log(exists null); // false
>

Same argument as given for "myvar"


>
>     var obj = {};
>     console.log(exists obj.prop); // false
>

This makes complete sense, but still same as my first example

  ( "prop" in obj )



Rick





>        --
> Dr. Axel Rauschmayer
> a...@rauschma.de
>
> home: rauschma.de
> twitter: twitter.com/rauschma
> blog: 2ality.com
>
>
>
>
> _______________________________________________
> 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