为什么这两行都返回相同的结果

时间:2012-04-04 19:38:53

标签: javascript

这两个都返回true。是一个布尔值,另一个是文本。不应该没有.value错误,因为它引用的是对象而不是对象值属性? 请帮助我理解这一点。

<input type="text" name="sigstatus1" id="sigstatus1" style="display:none;" size="40" fieldlength="50"></input>
<input type="text" name="sigstatus2" id="sigstatus2" style="display:none;" size="40" fieldlength="50"></input>

var sigStatus1 = document.getElementById("sigstatus1").value;
var sigStatus2 = document.getElementById("sigstatus2");

sigStatus1 = true;
sigStatus2 = true;

alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

小提琴http://jsfiddle.net/Xp7jX/

2 个答案:

答案 0 :(得分:1)

您问题的直接答案是:

alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

将两个值都显示为true,因为在该行代码之前,您将两个值都设置为true:

sigStatus1 = true;
sigStatus2 = true;
alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

看起来你认为这段代码:

var sigStatus1 = document.getElementById("sigstatus1").value;
sigStatus1 = true;

将DOM元素值设置为true。它不会。

当你这样做时:

var sigStatus1 = document.getElementById("sigstatus1").value;

您只是从DOM元素中获取值并将其放入局部变量中。由于它是文本字段,因此该值将是文本字符串。

然后你这样做:

sigStatus1 = true;

您只是使用布尔值true替换该局部变量的内容(它不会对DOM元素执行任何操作)。然后,当您在警报中显示该变量时,javascript会将布尔值转换为文本(出于显示目的),您会看到“true”。

如果要设置显示DOM元素的值,您只需执行以下操作:

var sigStatus1 = document.getElementById("sigstatus1").value;
alert(sigStatus1);

如果你想设置DOM元素的值,你可以这样做:

document.getElementById("sigstatus1").value = "whatever";

答案 1 :(得分:0)

这两个值都是布尔值true,您将明确地覆盖这些值:

sigStatus1 = true;
sigStatus2 = true;

也许你在找这个?

var sigStatus1 = document.getElementById("sigstatus1").value;
var sigStatus2 = document.getElementById("sigstatus2");
alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

变量sigStatus2应提醒[object HTMLDivElement](由对象toString方法内部生成)。