<br><br><div class="gmail_quote">On Sun, Jan 1, 2012 at 6:32 AM, Dean Landolt <span dir="ltr"><<a href="mailto:dean@deanlandolt.com">dean@deanlandolt.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br><br><div class="gmail_quote"><div class="im">On Sun, Jan 1, 2012 at 12:12 AM, John J Barton <span dir="ltr"><<a href="mailto:johnjbarton@johnjbarton.com" target="_blank">johnjbarton@johnjbarton.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br><br><div class="gmail_quote"><div>On Sat, Dec 31, 2011 at 7:53 PM, Axel Rauschmayer <span dir="ltr"><<a href="mailto:axel@rauschma.de" target="_blank">axel@rauschma.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word"><div><div><blockquote type="cite"><div>1. We want sane isObject and isNull predicates, ideally using typeof. Lack of them continues to bite people, as the web contains code that wrongly assumes typeof x == "object" => x.foo won't throw on null x.<br>



</div></blockquote><div><br></div></div><div>What are the use cases for typeof? Offhand, I see five and for most of them, other solutions seem to be better.</div></div></div></blockquote><div><br></div></div><div><div>In my experience the major use of typeof is to implement dynamic function overloading. †That is, a function that is flexible in the arguments it takes, such that one logical name maps to multiple use cases.</div>



</div><div><div>†</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><br></div><div>1. Checking whether a variable has been declared.</div>



<div>† † Problematic: verbose and conflated with checking for a declared variable having the value `undefined`.</div><div>† † Better: a dedicated operator or predicate for performing this check.</div></div></div></blockquote>



<div><br></div></div><div>Sorry, I don't think anyone checks if a is variable declared. You just look at the source code.</div></div></blockquote><div><br></div><div><br></div></div><div>Tell that to people writing feature detection code :)</div>
</div></blockquote><div><br></div><div>Sorry I don't understand what you mean here. I thought feature detection relied on testing for the existence of certain object properties and functions.</div><div>†</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_quote"><div class="im">

<div><br></div><div>†</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div style="word-wrap:break-word"><div><div></div><div>2. Checking that a value is neither null nor undefined.</div><div>† † Problematic: canít be done via only typeof currently.</div><div>† † Better: a predicate for performing this check. This use case†will become less important with default parameter values.</div>



</div></div></blockquote><div><br></div></div><div>if(!name) {}</div></div></blockquote><div><br></div><div><br></div></div><div>And if name is 0? Or ""? Whoops. Javascript's coercion is pretty winful here (in spite of what jslint might say): `if (name == null)` is more targeted, just catching the name === null and name === void 0 cases.</div>
<div class="im">

<div>†</div></div></div></blockquote><div><br></div><div>I was challenging Axel's characterization of how JS devs use typeof, since it leads him to conclude that we need to add a bunch of new language features. In code I see, devs don't use typeof for checking a value is null or undefined, so don't base new language features on this use case.</div>
<div><br></div><div>I agree that the common practice of testing if(!name) has pitfalls. But doesn't the common practice suggest that more elaborate features will not help? We need something as simple as if (!name).</div>
<div><br></div><div>jjb</div></div>