我们知道 中括号[] 可以取一个对象的属性值,而且中括号里面还能是表达式
var obj = {a: 1}
var prop = 'a';
console.log(obj[prop]); // a
问题来了,中括号可以取任何变量的属性值?
var exampe = 1;
example['1'] //undefined
example = true;
example['1'] //undefined
example = '';
example['1'] //undefined
example = null
example['1'] // 抛出异常
example = undefined
example['1'] // 抛出异常
说明了,[]可以为 任何分配内存的变量 取属性值
举个例子:
为应付后端数据不稳定的问题,我们需要格式化的取出数据,
需求,写一个格式化函数, 这个函数第一个参数为一个变量,类型不定,后面的参数为不定个数的属性
比如:
formate(obj,, b, c, d) // obj.a.b.c.d
function formate() {
var args = Array.prototype.slice.call(arguments);
var obj = args[0];
var props = args.slice(1);
for (var i = 0; i < props.length; i++) {
// 这里必须要判断, 不然的话 obj为null 或者 undefined
// 那么obj['x']会报错
// 即[]只能去有分配内存的变量的属性值
if (obj) {
obj = obj[props[i]];
}
}
return obj;
}
var obj = {
a: {
b: {
c:{
d: 1
}
}
}
}
console.log(formate(obj, 'a', 'b', 'c'));
console.log(formate(null, 'a', 'b', 'c'));
console.log(formate(1, 'a', 'b', 'c'));