Javascript “的价值究竟是什么?”;未定义的“;?

Javascript “的价值究竟是什么?”;未定义的“;?,javascript,jquery,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 nev

我试图捕获某个变量的值,如果它为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)弹出“未定义”。但是,当if-then的值为空时,我似乎不知道如何进入它。

未定义的的确切值是
未定义的

if(prevContactID === undefined)
未定义是全局对象的属性,即它是全局范围内的变量。未定义的初始值是未定义的原语值

$(".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) {
            ...
        }
    });
});
在现代浏览器(JavaScript 1.8.5/Firefox 4+)中,根据ECMAScript 5规范,undefined是一个不可配置、不可写的属性。即使不是这样,也要避免覆盖它

阅读此评论后更新了答案


它也是未定义的,因为prevContactID是一个字符串。字符串没有“value”属性。它们是价值观Taplar


这是因为您严格地将(==)与字符串“undefined”进行比较,而不是将
undefined
作为文本进行比较。顺便说一句,未定义与无值相同。而null是一个值


编辑正如Felix所建议的,undefined也是一个值。对如果我说“undefined是尚未定义或未分配任何值的变量的默认值”,那就更好了。

不要检查字符串
“undefined”
。检查:


或者,一般检查,包括
null
undefined

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

<> P>所有的答案都是有效的,但我认为值得指出的是,将它与一个字符串进行比较是完全正确的。在比较之前,你唯一缺少的是<代码>类型> <代码>,考虑下面的

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

}

这是可行的。

undefined
是javascript中的一个特殊变量。请尝试在不带任何引号的情况下使用它。
prevContactID.value===undefined
很简单!
undefined
本身就是一个值。还有一个变量
undefined
的值是
undefined
另一方面,它是一个字符串文本,产生一个字符串值。另外,它是未定义的,因为prevContactID是一个字符串。字符串没有“value”属性。它们是值。“顺便说一下,未定义与缺少值相同。而null是一个值。”。但是,它是在某些情况下隐式创建的(例如访问不存在的属性)。
undefined==“undefined”
的计算结果为
false
,即使使用非严格比较也是如此。第二个选项对显示的代码最有意义。第三个选项,当情况认为
null
undefined
在功能上等同(相当常见)时,应与
=
进行比较,而不是
==
,因为在
=
规则下
null
undefined
的值是相同的。