>>    ({ 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
>>    });

> Sure, but in that case the test 
>   typeof define === 'function'
> tests the value that the variable 'define' references.  It does not test if 
> "define' has been declared.

I’m not completely sure I understand what you mean.

typeof define === "function"
- Node.js: variable "define" has not been declared. Because of that, typeof 
define is "undefined" and the expression is false.
- Browser + RequireJS: There is a global variable "define" whose value is a 
function. Hence typeof define is "function" and the expression is true.

> The exists operator would work as follows (slightly edited from a previous 
> email):
> 
>     console.log(exists globalUnknown); // false
> 
>     // undefined and null in several variations
> 
>     var myvar;
>     console.log(exists myvar); // false
> 
> Well myvar is declared so how can exists be false?

Right. Maybe the operator should have a different name. "isDefined"? "has a 
value" expressed as an operator name?

     isDefined x

would be syntactic sugar for

     typeof x !== "undefined" && x !== null

The expression would not throw an exception if x hasn’t been declared.

The two most important use cases for typeof probably are:

- isDefined
- Helping to implement getTypeName() whose results are
    - "null", "undefined", "boolean", "number", "string" for primitive values
    - [[Class]] for objects ("String", "Date", etc.)

-- 
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

Reply via email to