究竟是什么," undefined"?

时间:2016-12-07 16:08:17

标签: javascript jquery

我试图捕捉某个变量的值,如果它是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。

4 个答案:

答案 0 :(得分:5)

请勿检查字符串"undefined"。检查the primitive undefined

if(prevContactID.value === undefined) {
    // we never get here
}

或者,检查falsy values一般,其中包括nullundefined

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是一个值。

根据Felix的建议

编辑,undefined也是一个值。是的..如果我说“未定义是尚未定义的变量的默认值,或者尚未赋值,则更好”。

答案 3 :(得分:1)

所有答案都是有效的,但我认为值得指出的是,将它与字符串进行比较是完全没问题的。在比较之前,您唯一缺少的是typeof前缀,请考虑以下内容

if(typeof prevContactID.value === "undefined") {

}

这样可行。