Javascript 检索setAttribute值:布尔值或字符串

Javascript 检索setAttribute值:布尔值或字符串,javascript,jquery,Javascript,Jquery,我可能在这里犯了一些javascript错误 我正在使用以下(示例)代码向下拉列表中添加选项: sel = document.getElementById("emp-list"); <for loop> ( opt = document.createElement('option'); //add value to option also add a 'assiganble' data var assign = true; opt.setAttribute("data-assigna

我可能在这里犯了一些javascript错误

我正在使用以下(示例)代码向下拉列表中添加选项:

sel = document.getElementById("emp-list");
<for loop> (
opt = document.createElement('option');
//add value to option also add a 'assiganble' data
var assign = true;
opt.setAttribute("data-assignable", assign);
sel.appendChild(opt);
)
在一台机器中,这一工作方式与预期一致。。。它正确地计算条件是否为布尔真/假,并继续执行其余代码

然而,在第二台机器中,它总是执行'false'块!! 到目前为止,在第二台机器上进行此操作的唯一方法是在以下条件下使用:

if ($("#emp-list option:selected").attr('data-assignable') === "true") {

} else {

}
(如果我不使用==“true”,则始终执行true块;即使我希望.attr('data-assignable')为布尔值)


你能解释为什么会有这种行为吗?

JavaScript中有一个称为类型强制的概念。 类型强制意味着,当运算符的操作数是不同类型时,其中一个操作数将转换为另一个操作数类型的“等效”值

比如说 整数==双精度 左侧的整数值将转换为double,然后比较这两个值

但是,如果使用==,则不会发生此类转换。当操作数的类型不同时,此运算符返回false,并且仅在值的类型相同时比较值。 查看更多信息-

我可以从您的代码中看出,
数据可分配
默认设置为true。因此,if或else块的执行取决于此数据属性的值

if($("#emp-list option:selected").data('assignable')){

  } else {

}
您确定以后在代码中正确更改了数据属性吗?我还想知道,当您试图在第二台计算机上运行相同的代码时,是否有任何控制台错误?
下面是一个简单的,当第8行:
var assign=true
时尝试运行代码,当
var assign=false

可能重复时尝试运行代码来回答您的问题,为什么会出现这种行为?第一种方法仅检测是否存在可分配的属性数据。如果它具有特定的值,则不会。如果它查找可分配的属性数据,并且该属性位于元素上。它会变成现实。因为该属性确实存在。感谢Neha的回复。但是,如果查看在第一台机器上工作的if条件-($(“#emp list option:selected”).data('assignable');不涉及类型强制,我希望它返回true或false(布尔值)。在第二台计算机上,返回的总是false。由于要比较布尔值rt,能否删除“”(双引号)?那么,为什么要使用字符串来比较值。如果我删除“”(双引号),则将执行always else块。是否尝试使用==?删除引号并重试===在您的示例中,您希望比较2个布尔值,因此使用===强制执行类型检查。“var assign=$(“#emp列表选项:selected”)。数据('assignable');如果(assign){}否则{}按预期工作。但是,“if($(“#emp list option:selected”).data('assignable')){}else{}”总是在第二台机器上执行else blok。奇怪的这可能是什么原因造成的?您可以发布您的代码吗?您没有说明如何更改可分配数据属性。我真的很好奇为什么代码在一台机器上工作而在第二台机器上不工作的根本原因?还请尝试找到我的问题的答案:当您在另一台机器上运行相同的代码时,是否有任何控制台错误?Wael,我想我找到了导致这种行为的原因。我在html文件中添加了,现在它可以在两台机器上工作。这是一个客户端应用程序,我将一个html页面加载到一个小部件(客户端本地的html文件)中。因此,它不使用任何浏览器。小部件正在使用IE组件。谢谢你的帮助!!
if($("#emp-list option:selected").data('assignable')){

  } else {

}