<body>
<script language="javascript">
window.tdiff = []; fred = function(a,b){return a-b;};
window.onload = function(e){
console.log("window.onload", e, Date.now() ,window.tdiff,
(window.tdiff[1] = Date.now()) && window.tdiff.reduce(fred) );
}
</script>
</body>
以上代码来自网站。
在firefox-&gt;控制台中,它显示:
window.onload load 1372646227664 [undefined, 1372646227664] 1372646227664
问题:
对于window.tdiff->[undefined, 1372646227664]
,为什么不:[]
,因为当运行代码:window.tdiff
时,它仍然是一个空数组?
对于window.tdiff.reduce(fred)->1372646227664
,window.tdiff = [undefined, 1372646227664]
,undefined - 1372646227664
,应为NaN
,为何显示1372646227664
?
答案 0 :(得分:1)
对于window.tdiff-&gt; [undefined,1372646227664],为什么不:[],因为当 运行代码:window.tdiff,它仍然是一个空数组?
当你说代码时,它不是一个空数组:window.tdiff你指的是它作为参数传递给方法的点,但是当console.log函数评估你传入的值时,它的不再是一个空数组,因为它已被下一个参数填充。
> (window.tdiff[1] = Date.now()) && window.tdiff.reduce(fred) )
正如Arun P Johny在其他答案中指出的那样,reduce不会对未定义元素应用fred(),这就是为什么你没有得到NaN
答案 1 :(得分:0)
P.S。如果您将console.log添加到fred,那么您将不会调用
答案 2 :(得分:0)
diff
之前,它会填充console.log
数组的第二个元素。reduce
对数组中存在的每个元素执行一次回调函数,不包括数组中的空洞(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)答案 3 :(得分:0)
从文档reduce中排除了数组中的漏洞,并且因为您的数组只有一个元素,所以它将作为reduce的结果返回