Javascript!==没有给出与===的倒数相同的结果

时间:2012-01-03 10:22:14

标签: javascript canvas

我已将色轮的图像加载到画布上,并且我在数组中有一个色调值列表。我遍历画布上的每个像素,并删除匹配相同色调值的像素。

代码是:

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

为什么它看起来不像第一个圆圈的倒数?

谢谢!

5 个答案:

答案 0 :(得分: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';
}

答案 1 :(得分:2)

您需要使用!=表示“不相等”,因为您只想比较这些值。
检查一下:Javascript comparison

!==还会比较不同的身份/对象(如Kees所提到的)。

答案 2 :(得分:2)

等同身份之间存在差异。

  

平等(==,!=)

     
      
  • 如果两个表达式的类型不同,请尝试转换   它们是字符串,数字或布尔值。
  •   
  • NaN不等于包括其本身在内的任何东西。
  •   
  • 负零等于正零。
  •   
  • null等于null和undefined。
  •   
  • 如果值是相同的字符串,则数值被认为是相等的   等价数字,相同对象,相同布尔值或(如果   他们可以被强迫进入其中一种情况。
  •   
  • 其他所有比较都被视为不平等。
  •   
     

身份(===。!==)

     

这些运算符的行为与除了no之外的相等运算符相同   完成类型转换,类型必须相同   被认为是平等的。

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

答案 3 :(得分:0)

无法找到您所指的运营商。我建议你使用!(a === b)

查看w3school list of javascript operators

答案 4 :(得分:0)

您正在使用!==将字符串与整数进行比较。这将始终返回false。 查看http://jsfiddle.net/k4EAQ/

使用!= Javascript不检查类型,并会给你你想要的。但是如果你想使用!==你可以随时将变量转换为整数或字符串,这样你就可以确定它们与类型匹配。

How do I convert a string into an integer in JavaScript?