javascript - jquery字符串比较变量

标签 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');
    });
});

当我运行此命令时,仅弹出“情况 1”。从逻辑上讲,这个语句通过传递属性应该是正确的,所以我猜测这是一些 JavaScript 字符串语法问题或者 jQuery 范围的事情搞砸了。如有任何建议,我们将不胜感激。

最佳答案

其他发帖者建议了解决方法,我将尝试回答为什么您的原始代码不起作用的问题。答案相当重要,并揭示了一些值得注意的 javascript 陷阱。

jQuery.each 使用 applythis 传递给其回调。当 apply 的参数是原始值(如字符串)时,它将被“装箱”,即转换为对象(具体来说,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!
   })
})

虽然 a[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 返回组成它的原始字符串,如果两个原始字符串的字符相等,则它们相等。

关于javascript - jquery字符串比较变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900796/

相关文章:

python - 使用 Python Parse 获取由数字、字母、空格和符号组成的字符串

Javascript 图像属性

javascript - javascript类中的静态异步函数

javascript - 用于切换 div 的 Div 按钮 - Javascript/CSS

JavaScript 和 jQuery

javascript - jquery中如何获取不同div的输入值?

sql-server - SQL 替换字符串值

javascript - 使用 JavaScript 读取自定义 HTML 元素在 IE 中不起作用

javascript - AngularJS - 通过 ID 从关联的 Controller 访问 View 元素

c++ - BigNum 类字符串构造函数错误