缩短javascript代码 - 检查属性是否存在且不为空

时间:2017-01-21 22:01:39

标签: javascript

是否可以缩短此代码?

var access_followup = user_access && user_access.followup && user_access.followup.access ? true : false;

4 个答案:

答案 0 :(得分:1)

也许我在回答错误的事情,但你为什么要缩短它?我会投票让它更长一些,但对于使用你的代码的人来说更容易阅读(包括你:)。

通过将其分成多行,您可以使其更具可读性:

var access_followup = (
 user_access &&
 user_access.followup &&
 user_access.followup.access === true // if access is a boolean value
);

或者,如果你真的想要短代码并且你没有使用缩小器,你可以尝试https://jscompress.com/(它实际上压缩你粘贴到它的任何代码!但是它使得它的可读性降低)

答案 1 :(得分:1)

不幸的是,JS没有空条件运算符。您可以为它编写辅助函数或使用创建虚拟对象的稍微有效的方法:

var access_followup = !!((user_access || {}).followup || {}).access;

更短并且阻止使用属性名称多次,但不提高可读性。即使值不存在,!!也用于强制执行布尔值

答案 2 :(得分:0)

如果前两个检查是因为您在user_access.followup未定义时正在防止异常抛出,您可以尝试这样做:

var accessFollowup;
try {
  accessFollowup = !!user_access.followup.access;
} catch (e) {
  accessFollowup = false; 
}

您还可以通过使用!!强制删除三元组来强制将最后一个元素强制为布尔值:

var access_followup = !!user_access && !!user_access.followup && !!user_access.followup.access

答案 3 :(得分:0)

非常难看的代码

var access_followup = (followup = (user_access || {}).followup) && followup.access;