簡體   English   中英

為什么這個值在循環結束時返回 true,然后在循環開始時返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM