1
timwei 2017-07-11 17:50:51 +08:00 1
push method returns object's length
|
2
timwei 2017-07-11 17:51:49 +08:00
|
4
autoxbc 2017-07-11 18:28:40 +08:00 2
就这个题目来说,单看 push 的返回值并不算完。关键的部分是,ECMA 详细规定了块语句的返回值,for 循环的返回值,可以看这个文档。
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-for-statement |
5
timwei 2017-07-12 12:32:13 +08:00 1
@autoxbc 感谢回复,不过我认为与文件的 for 实现无关
TL; DR ``` value = eval('for(let a=0 ; a<9 ; a++){arr=[];arr.push(""); };'); //lz 的题目 value // 1 //这个 1 是因为 eval() 返回了 for 最后的执行语句 arr.push("") //而 arr.push("")返回了阵列的长度。 ``` 与文件中的 for 规定的返回值无关,倒是与执行顺序有关。 http://www.ecma-international.org/ecma-262/6.0/index.html#sec-forbodyevaluation for 不帶 Return value 的 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for 举例来说,就是你"不能"写些像 ``` value = for(let a=0 ; a<1 ; a++){ a }; ``` 会有输出是因为 eval(),eval()会 return 最后一个执行的 statement https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval ``` eval(1; 2; 3;) // 3 value = eval('for(let a=0 ; a<9 ; a++){arr=[];arr.push(""); }; 5566;'); // 5566 // #其实 for 跟 push 都是伪命题 ``` |
7
autoxbc 2017-07-12 21:15:14 +08:00 1
|
8
mufeng OP @autoxbc #7
@timwei #5 https://twitter.com/paul_irish/status/818568243350630401 有关于 statement completion value 的讨论 |