素材牛VIP会员
关于js变量定义问题
 ed***on  分类:JavaScript  人气:816  回帖:3  发布于6年前 收藏
var g = { id: 1 };
var b = function(index) {
    console.log(g.index);
    //console.log(g."id");
};
b('id');
//如何实现 console.log(g.id); 

//q2
var g = {
    id: {
        name: 1
    }
};
//请问大佬怎么用传参数方法 console.log(g.id.name);

上述问题中 我能确定g的存在 可是里面的对象属性我希望能够给个配置 然后这个函数封装起来.如果问题不清晰我能继续补充

 标签:javascript

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv5 码农
迷***雾 软件测试工程师 6年前#1

answer1: JS 中访问对象属性有两种方法

  • 使用 . 运算符,其左边是引用对象的变量名称,右边是属性名称(加引号,加了引号叫字符串)
  • 使用 [] 运算符,其左边是引用对象的变量名称(无引号),中间是一个表达式,其计算结果是表示属性名称的字符串。字符串本身也是一个表达式,所以可以直接给 g["id"],它与 g.id 效果等同

上面提到的“名称”,其实叫做标识符,在 JS 中,标识符是有约束的,比如 your-name 就不是一个合法的标识符,但是它却是一个合法的属性名(因为 JS 的对象可以看做一个 Hash 表,所有字符串都中以做为键,却属性名),这种情况下需要引用属性,必须使用 [] 运算符。比如 o.your-name 就是错误的,而 o["your-name"] 才是正确。

o.your-name 被会解释器解释为 o.your - name,是一个减法表达式。

answer2:根据上述原因,g.id.name 本身是一个合法的表达式,可以取到其值 1。但是我理解你这里是是想实现类似 lodash 中 _.get() 函数的功能,即给定一个字符串表示属性路径,要获取其值,那么可以分解路径,再通过循环来获取值

function get(obj, attrPath) {
    const segments = attrPath.split(".");
    let current = obj;
    for (let i = 0; i < segments.length; i++) {
        current = current[segments[i]];
        // 容错处理,如果某一步取值为 null 或 undefined
        // 就不可能再继续下去,直接返回该值即可。
        // 也可以根据业务逻辑需要在这里抛出异常
        if (current === void 0 || current === null) {
            return current;
        }
    }
    return current;
}

使用

get(g, "id.name")
Lv4 码徒
ji***ca JS工程师 6年前#2
 var g={
    id:{
        name:1
    }
};
//请问大佬怎么用传参数方法 console.log(g.id.name);
Lv4 码徒
醉***o JAVA开发工程师 6年前#3
 var g={id:1};
    var b=function(index){
        console.log(g[index]); // 这里要把.换成括号,访问变量啊
    };
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取