jquery字符串比较变量

时间:2012-06-05 16:05:33

标签: javascript jquery string

我有以下代码:

arr = ["abc", "def", "ghi", "jkl"]
arr2 = ["abc", "def", "ghi", "jkl"]

$(arr).each(function(){
    thiselem = this;

    $(arr2).each(function(){
        if(thiselem == "abc" && this == "abc")
            alert("case 1");
        if(thiselem == this)
            alert('case 2');
    });
});

当我运行时,只会弹出“case 1”。从逻辑上讲,这个语句应该是传递属性的真实,所以我猜它是一些JavaScript字符串语法问题或jQuery范围的事情搞乱了这一点。任何建议都表示赞赏。

4 个答案:

答案 0 :(得分:1)

其他海报提出了解决方法,我将尝试回答原始代码无法正常工作的问题。答案是非常重要的,并揭示了一些有用的知识javascript陷阱。

jQuery.each使用applythis传递给其回调。当apply' s参数是一个原始值时,就像字符串一样,它将被"装箱",即转换为一个对象(具体地说,是String对象):

console.log(typeof("cat"))  // string

logger = function() { console.log(typeof(this)) }
logger.apply("cat")  // object

现在考虑以下事项:

a = ["abc"]
b = ["abc"]

$(a).each(function() {
   var that = this
   $(b).each(function() {
       console.log(this == that) // false!
   })
})

虽然[0]和b [0]是"显然"等于,==运算符返回false,因为它们都是对象,并且如果两个对象变量在物理上是同一个对象,则它们只相等。另一方面,这可以按预期工作:

a = ["abc"]
b = ["abc"]

$(a).each(function() {
     console.log(this == "abc") // true
     console.log(this == b[0]) // true
})

当JS将对象与字符串进行比较时,使用toString将对象转换为字符串原语。由于this是一个String对象,因此toString返回它所构成的原始字符串,如果它们的字符相等,则两个原始字符串相等。

答案 1 :(得分:0)

arr = ["abc", "def", "ghi", "jkl"]
arr2 = ["abc", "def", "ghi", "jkl"]

$(arr).each(function(index, val1) {
    $(arr2).each(function(i, val2) {
        if (val1 == "abc" && val2 == "abc") alert("case 1");
        if (val1 == val2) alert('case 2');
    });
});

<强> Sample workout

答案 2 :(得分:0)

尝试如下,

var arr = ["abc", "def", "ghi", "jkl"]
var arr2 = ["abc", "def", "ghi", "jkl"]

$(arr).each(function(idx, el){
    $(arr2).each(function(idx, iEl){
        if(el == "abc" && iEl == "abc")
            alert("case 1");       
        if(el == iEl)
            alert('case 2');
    });
 });

注意:我假设上面只是一个伪代码。如果您告诉我们您要做的事情,我们可以提供更好的帮助。

DEMO

答案 3 :(得分:0)

试试这个:

var arr = ["abc", "def", "ghi", "jkl"]
var arr2 = ["abc", "def", "ghi", "jkl"]

jQuery.each(arr,function(key1, val1){
  jQuery.each(arr2,function(key2, val2 ){
    if(val1 == "abc" && val2 == "abc")
        alert("case 1");       
    if(val1 == val2)
        alert('case 2');
   });
});​

这是Demo