检查变量是否未定义,因为它是=== true或已分配值

时间:2014-04-25 21:57:50

标签: javascript undefined

有时我发现在javascript上执行此操作是很常见的,以便检查variable是否不是undefined,因为它已分配

if(variable) {
  /* not undefined, do something */
}

但是,我问自己如何在下列情况下检查variable是否不是undefined

现场演示: http://jsfiddle.net/Vp8tN/1/

$(function() {

    var person = create('John');
    var isMarried = person.isMarried;

    console.log('isMarried: ' + isMarried);

    if(isMarried) {
        console.log('Do something!');
    }

});

function create(name) {
    var person = {};
    person.name = name;
    person.isMarried = getRandom();
    return person;
};

function getRandom() {
    var arr = [true, 'No', undefined];
    var rand = arr[Math.floor(Math.random() * arr.length)];
    return rand;
};

在这种情况下,isMarried变量可以是true'No'undefined

所以,我的问题是......

1)如何检查isMarried变量 NOT undefined是否为{{1} } === (等于true)或者因为它分配了(最后一个发生在true)。

2)是否可以在不使用额外isMarried === 'No'声明或条件的情况下进行检查?

3)检查此问题的最佳方法是什么?


在上面描述的两种情况中(在第1位)我进入了if声明。检查浏览器if的输出:

console

PS。 我正在使用isMarried: true Do something! isMarried: undefined isMarried: No Do something! 进行测试,这个问题与该框架有关的 NOT !感谢。

2 个答案:

答案 0 :(得分:3)

单个相等测试有三个选项:

  1. 严格平等。 if (person.isMarried === true)if (person.isMarried !== undefined)。检查变量是否明确等于某事(不允许类型转换)。

  2. 宽松的平等。允许类型转化的if (person.isMarried == true)

  3. 任何虚假/虚假的价值if (person.isMarried)。如果person.isMarried包含任何真实价值,那么这将得到满足。即使"no"也是一个真正的价值。

  4. 如果您尝试区分"no"falseundefined之间的区别,则可能需要使用多个比较,因为它们都是单独的值单独的类型。


    如果您只想知道变量是否具有任何值(例如,未定义),则可以使用严格相等检查并与实际undefined值进行比较:

    if (person.isMarried !== undefined) {
        // there is some value in person.isMarried though it could be anything
        // other than the undefined value
    }
    

答案 1 :(得分:2)

  1. isMarried !== undefined
  2. 是的,请参阅#1。
  3. 1

  4. 看这篇文章。 https://stackoverflow.com/a/3390426/1313439

    编辑:由于jfriend00在评论中指出答案的原因,isMarried !== undefined可能优于typeof isMarried !== 'undefined'