![](/img/trans.png)
[英]why does “[] == 0” return true while “[]” is true and “0” is false?
[英]Why does this value return true at the end of the loop, and then false at the start of it?
考慮以下函數,它應該將圖像以塊的形式繪制到畫布上,緩存這些塊,然后在下一個循環中檢查這些緩存的塊,以確保我們不會再繪制任何東西。 如果console.log確認緩存的chunk數組從來沒有被清除過,為什么在pixels.data == cachedImage[y][x]
的結果時,總是返回false
,但是更新緩存后卻報告true
嗎?
async function temp() {
const DIVIDE = 8;
for(let y = 0; y < DIVIDE; y++) {
if(cachedImage[y] == undefined) {cachedImage[y] = []; console.log(y);}
for(let x = 0; x < DIVIDE; x++) {
let widthChunk = (drawBuffer.width)/DIVIDE;
let heightChunk = (drawBuffer.height)/DIVIDE;
let pixels = ctx.getImageData(x*widthChunk,y*heightChunk,widthChunk-1,heightChunk-1);
let pixeldata = pixels.data;
debugBox3.innerHTML = (cachedImage[y][x] == pixels.data); // always "false"
if(pixels.data == cachedImage[y][x]) {
} else {
cachedImage[y][x] = pixels.data;
ctxFinal.putImageData(pixels,x*widthChunk,y*heightChunk)
}
debugBox4.innerHTML = (cachedImage[y][x] == pixels.data); // always "true"
}
}
}
await temp();
假設以下代碼:
let object1 = { key: 'value' }
var object2 = { key: 'value' }
有人會認為object1 == object2
是真的,但事實並非如此。 為什么? 因為 object1 和 object2 只是對對象的引用 - 即對獨立對象的引用。
但是,如果我們擴展代碼:
let object1 = { key: 'value' }
var object2 = { key: 'value' }
object1 = object2
現在我們已經將變量 object1 設置為等於對 object2 的引用。 我們沒有復制object2。
因此object1 == object2
現在為真。
當你說cachedImage[y][x] = pixels.data;
您實際上將cachedImage[y][x]
設為對pixels.data
的引用。 只有這樣它才等於pixels.data(這也只是一個參考)。
這對 c 中的指針有些熟悉,請參閱: https : //www.sitepoint.com/how-javascript-references-work 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.