我正在尝试设置一个变量:
latestPostId = posts[latestPost].post_id
但在一种情况下,尚未定义。最好的检查方法是什么?
我试过这些:
if (data.post_id !== undefined) {
if (data.post_id !== 'undefined') {
if (typeof data.post_id != 'undefined') {
但似乎都没有用。检查posts[latestPost].post_id
是否已定义的最佳方法是什么?
答案 0 :(得分:0)
检查帖子[latestPost] .post_id是否已定义的最佳方式是什么?
posts[latestPost].post_id !== undefined
是否有效?
我可能会posts[latestPost] && posts[latestPost].post_id
。
答案 1 :(得分:0)
你可以用多种方式做到(你的最后一个是好的):
if (typeof data.post_id != 'undefined')
或更简单
if (data.post_id)
但是:如果数据根本不存在,这可能会产生错误。所以你应该这样做:
if (data && data.post_id)
对于像:a.b.c.d.ef这样的对象,你应该这样做:
if (a && a.b && a.b.c && a.b.c.d && etc)
答案 2 :(得分:0)
您可以使用帮助程序来避免冗长的if
语句并提高可重用性,例如:
/**
* @param {string} key
* @param {object} obj
*/
function keyExists(key, obj) {
var res = key.split('.').reduce(function(acc,x) {
return acc[x];
},obj);
return res != null || false;
}
并像这样使用它:
var obj = {a: {b: {c:'foo'}}};
console.log(keyExists('a.b.c', obj)); //=> true
console.log(keyExists('a.b.c.d', obj)); //=> false
if (keyExists('a.b.c', obj)) {
// it exists
}
答案 3 :(得分:0)
in
运算符检查对象是否有属性。
'post_id' in posts[latestPost]`
有些人更喜欢hasOwnProperty
。 in
遍历对象的原型链,而hasOwnProperty
则不遍历。