On Jan 21, 2015, at 2:09 PM, Mark S. Miller wrote:

> // old ES5 code
> 
> function f(allegedDate) {
>   if (({}).toString.call(allegedDate) === "[object Date]") {
>     JSON.stringify(allegedDate); // "[]" impossible in ES5
>     Array.isArray(allegedDate); // true impossible in ES5
>     Date.prototype.getYear.call(allegedDate); // error impossible in ES5
>   }
> }
> 
> 
> // new ES6 code
> 
> const fakeDate = [];
> const defProp = Object.defineProperty;
> defProp(fakeDate, Symbol.toStringTag, { value: "[object Date]" });
> f(fakeDate); // all ES5 impossible behaviors happen

not quite.  The last of your tests (getYear) will still fail because fakeDate 
is not internally branded as a date. 

See 
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-date.prototype.getyear 
step 1 and the definition of "this time value" in 
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-date-prototype-object
 

(BTW, did you intentionally pick an Annex B Date method?)

Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to