mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
/*
|
|
* A random test based on a Slashdot comment :-)
|
|
*/
|
|
|
|
var res;
|
|
|
|
/*===
|
|
0 number
|
|
===*/
|
|
|
|
/* {} + [] parses as an empty block statement (!) followed by unary plus
|
|
* and an array, and is equivalent to:
|
|
*
|
|
* {};
|
|
* +[];
|
|
*
|
|
* where +[] evaluates to ToNumber([]):
|
|
*
|
|
* [] -> ToPrimitive([], hint Number)
|
|
* -> [].[[DefaultValue]] (hint = Number)
|
|
* -> Object.prototype.valueOf() -> returns [] itself, not primitive
|
|
* -> Array.prototype.toString()
|
|
* -> ""
|
|
* -> 0
|
|
*
|
|
* The coercion of an empty string or a string consisting only of
|
|
* whitespace is 0 and not a NaN (!); see E5 Section 9.3.1.
|
|
*/
|
|
|
|
res = eval('{}+[]');
|
|
print(res, typeof res);
|
|
|
|
/*===
|
|
[object Object] string
|
|
[object Object] string
|
|
===*/
|
|
|
|
/* [] + {} parses as a binary addition.
|
|
*
|
|
* Each side is first coerced using ToPrimitive():
|
|
*
|
|
* ToPrimitive({})
|
|
* -> {}.[[DefaultValue]] (no hint -> Number)
|
|
* -> Object.prototype.valueOf() -> returns [] itself, not pritimive
|
|
* -> Object.prototype.toString()
|
|
* -> "[object Object]"
|
|
*
|
|
* ToPrimitive([])
|
|
* -> [].[[DefaultValue]] (no hint -> Number)
|
|
* -> Object.prototype.valueOf() -> returns {} itself, not primitive
|
|
* -> Array.prototype.toString()
|
|
* -> ""
|
|
*
|
|
* So, [] + {} should yield "" + "[object Object]" == "[object Object].
|
|
*
|
|
* Same goes for ({} + []) which is a binary addition expression because
|
|
* of the parens.
|
|
*/
|
|
|
|
res = eval('[]+{}');
|
|
print(res, typeof res);
|
|
|
|
res = eval('({}+[])');
|
|
print(res, typeof res);
|
|
|
|
|