有时我发现在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 !感谢。
答案 0 :(得分:3)
单个相等测试有三个选项:
严格平等。 if (person.isMarried === true)
或if (person.isMarried !== undefined)
。检查变量是否明确等于某事(不允许类型转换)。
宽松的平等。允许类型转化的if (person.isMarried == true)
。
任何虚假/虚假的价值。 if (person.isMarried)
。如果person.isMarried
包含任何真实价值,那么这将得到满足。即使"no"
也是一个真正的价值。
如果您尝试区分"no"
,false
和undefined
之间的区别,则可能需要使用多个比较,因为它们都是单独的值单独的类型。
如果您只想知道变量是否具有任何值(例如,未定义),则可以使用严格相等检查并与实际undefined
值进行比较:
if (person.isMarried !== undefined) {
// there is some value in person.isMarried though it could be anything
// other than the undefined value
}
答案 1 :(得分:2)
isMarried !== undefined
看这篇文章。 https://stackoverflow.com/a/3390426/1313439
编辑:由于jfriend00在评论中指出答案的原因,isMarried !== undefined
可能优于typeof isMarried !== 'undefined'
。