我试图捕捉某个变量的值,如果它是null或未定义则执行某些操作。
$(".change-engineer").change(function (e) {
var prevContactID = $(this).data('prev-value');
alert(prevContactID.value); // this shows "undefined"
if (prevContactID.value === null)
{
// we never get here
}
if (prevContactID.value === "undefined")
{
// we never get here
}
$.ajax({
type: 'POST',
url: '@Url.Action("ChangeProposalEngineer", "RequestForQuotes")',
data: { "prevContactID": prevContactID },
cache: false,
complete: function (data) {
...
}
});
});
在服务器端,我可以在ChangeProposalEngineer
上设置断点,prevContactID
的值为" null"。
但在客户端,这个:alert(prevContactID.value);
弹出" undefined"。但是,我似乎无法弄清楚当该值为空时如何进入if-then。
答案 0 :(得分:5)
请勿检查字符串"undefined"
。检查the primitive undefined
:
if(prevContactID.value === undefined) {
// we never get here
}
或者,检查falsy values一般,其中包括null
和undefined
:
if(!prevContactID.value) {
// we never get here
}
答案 1 :(得分:2)
未定义的确切值为undefined
。
if(prevContactID === undefined)
undefined是全局对象的属性,即它是全局范围内的变量。 undefined的初始值是未定义的原始值。
在现代浏览器(JavaScript 1.8.5 / Firefox 4+)中,undefined是ECMAScript 5规范中不可配置的不可写属性。即使不是这种情况,也要避免覆盖它。
<强> Reference 强>
阅读此评论后更新了答案
它也是未定义的,因为prevContactID是一个字符串。字符串没有“值”属性。他们是价值观。的 Taplar 强>
答案 2 :(得分:2)
那是因为你严格比较(===)字符串“undefined”而不是untouch
作为文字。顺便说一句,未定义与缺乏价值相同。而null是一个值。
编辑,undefined也是一个值。是的..如果我说“未定义是尚未定义的变量的默认值,或者尚未赋值,则更好”。
答案 3 :(得分:1)
所有答案都是有效的,但我认为值得指出的是,将它与字符串进行比较是完全没问题的。在比较之前,您唯一缺少的是typeof
前缀,请考虑以下内容
if(typeof prevContactID.value === "undefined") {
}
这样可行。