是否可以缩短此代码?
var access_followup = user_access && user_access.followup && user_access.followup.access ? true : false;
答案 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;