前端 - JavaScript中使用多层级的对象属性有什么比较优雅的方式?
伊谢尔伦
伊谢尔伦 2017-04-10 14:49:04
[JavaScript讨论组]

比如有对象:

var a = {
        b:{
            c:{
                d:{
                }
            }
        }
    }

使用的时候比如
var param = a.b.c.d;
但是一旦其中c或者d不存在就会报错。
一般的方式是逐层检查,但是代码很不优雅。
有什么更好的方式呢?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
大家讲道理

层级能少当然好。

不过再怎么约定优化,多层级依然是会出现的.作为个体可能英明神武,群体内也总有些队友要呵呵的:)。何况,网络7层协议,哪位可以帮我减少一层呢。

所以,我们还是回到问题本身好点。

a.b.c.d 直达语义核心,很好。需要担心的异常情况,既然都说异常了,直接用异常处理即可。异常是分离正常代码和错误处理的好方法(好像废话


function d_value(){
try {
return a.b.c.d;
}
catch(err) {
result = nil;
}
}

80386 就已经直接支持异常了,没必要如同c一样,亦步亦趋的去检查了。这样的if ,? 样式的错误处理,该过时了。

迷茫
  1. 使用 CoffeeScript: a?.b?.c?.d

  2. Source

    var level3 = (((test || {}).level1 || {}).level2 || {}).level3;

    function checkNested(obj /*, level1, level2, ... levelN*/) {
      var args = Array.prototype.slice.call(arguments),
          obj = args.shift();
    
      for (var i = 0; i < args.length; i++) {
        if (!obj || !obj.hasOwnProperty(args[i])) {
          return false;
        }
        obj = obj[args[i]];
      }
      return true;
    }
    
    var test = {level1:{level2:{level3:'level3'}} };
    
    checkNested(test, 'level1', 'level2', 'level3'); // true
    checkNested(test, 'level1', 'level2', 'foo'); // false
    
  3. brototype

    var myURL;
    if (Bro(app).doYouEven('config.environment.buildURL')) {
        myURL = app.config.environment.buildURL('dev');
    }
    
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号