2012-01-03 66 views
2

我已经将一个色轮的图像加载到画布上,并且我有一个数组中的色调值列表。我遍历画布上的每个像素并移除匹配相同色调值的像素。Javascript!==没有给出与===相反的结果

的代码是:

var element = document.getElementById("wheel-canvas"); 
var c = element.getContext("2d"); 
var image = c.getImageData(0, 0, 375, 375); 
var imageData = image.data; 
paletteList = this.collection.pluck('hsv'); 
for (var i = 0, n = imageData.length; i < n; i += 4) { 
    var hsv = this.model.convertRGBToHSV(imageData[i], imageData[i+1], imageData[i+2]); 
    var hue = hsv[0]; 
    var sat = hsv[1]; 
    var val = hsv[2]; 
    $.each(paletteList, function(index, value) { 
    if (hue === value[0]) 
    { 
     imageData[i] = '0'; 
     imageData[i+1] = '0'; 
     imageData[i+2] = '0'; 
    } 
    }); 

} 

    c.putImageData(image, 0, 0); 

enter image description here

现在我想的是不匹配的色调成为黑色的所有像素。我修改代码:

if (hue !== value[0]) 

,我得到以下结果:

enter image description here

为什么没有它看起来像一个圆的倒数?

谢谢!

+0

http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use – 2012-01-03 10:35:14

+0

我与基斯C.贝克同意 - 运营商不是问题。请发布整个文档,以便我们可以运行和调试以发现问题。 – 2012-01-03 10:51:40

回答

5

您的逻辑来确定哪些像素设置为黑色,是错误的。

请注意,在您的each循环中,每个像素的色调将不等于调色板列表中的某些色调,因此所有这些色调都将设置为黑色。

你真正想对每个像素做什么是检测它的色调是否是托盘列表中与否。

var matched = false; 
$.each(paletteList, function(index, value) { 
    if (hue === value[0]) { 
     matched = true;  
     return false; 
    } 
} 
if (!matched) { 
    imageData[i] = '0'; 
    imageData[i+1] = '0'; 
    imageData[i+2] = '0'; 
} 
+0

谢谢!现在完美感觉:) – garg 2012-01-03 10:56:44

2

您需要使用!=代表'不相等',因为您只想比较这些值。
检查:Javascript comparison

!==也比较认同/对象,这是不一样的(如基斯提到)。

+2

'!=='运算符可以使用 - http://jsfiddle.net/Hu8ym/ – 2012-01-03 10:33:06

0

找不到您指的操作员。我建议你使用!(一===二)

看看w3school list of javascript operators

+0

'!=='运算符可以使用 - http://jsfiddle.net/Hu8ym/ – 2012-01-03 10:33:24

+0

我假设它是因为这个问题没有指出任何抛出的错误,但是它没有记录,因此为了得到预期的行为,我将使用!(a === b)这是记录。 – 2012-01-03 10:35:52

+3

[Undocumented?](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators) – 2012-01-03 10:37:44

2

平等身份之间的差异。

平等(==,!=)

  • 如果类型两人的表情都不同,试图 将它们转换为字符串,数字或布尔。
  • NaN不等于任何东西,包括它本身。
  • 负零等于正零。
  • null等于null和undefined。
  • 如果它们是相同的字符串,数字为 的等效数字,相同的对象,相同的布尔值或(如果不同类型),则可以将它们强制转换为其中一种情况。
  • 每个其他比较被认为是不平等的。

身份(===!==)

这些运营商相同的行为,以平等的运营商不同的是不 类型转换完成后,和类型必须相同是 视为相等。

Source.所以!==不能成为问题。