对象未定义时的最佳实践
Best practice when object is undefined if - else
我想知道如果我的代码接近是好的,我想:
- 检查对象是否存在
- 如果不存在,创建它并为它分配属性
- 如果已经存在,只需分配属性
我现在拥有的是下面的代码,但是我不喜欢把同一行写两次
function doSomething(_whatever){
if(typeof someobject === "undefined"){
someobject = { //dont exist
profile : "some value",
status : []
}
someobject.status.push(_whatever);
}else{
someobject.status.push(_whatever); //because already exist
}
}
写这段代码的更好的方法是什么?还是用一种更好、更少重复的方式?
thanks in advance
------原函数
function addPerson(_person){
var people = Iee.dashboard.analytics.data.people.data;
if(typeof people[_person.Id_Emp] === "undefined"){
people[_person.Id_Emp] = {
profile : _person,
status : []
}
people[_person.Id_Emp].status.push({Id_Emp : _person.Id_Emp, status : _person.Estatus1, estatusby : _person.Centro_de_trabajo});
}else{
people[_person.Id_Emp].status.push({Id_Emp : _person.Id_Emp, status : _person.Estatus1, estatusby : _person.Centro_de_trabajo});
}
addBlackList(_person);
}
一种常见的方法是进行冗余检查:
someobject = someobject || {
project:"some value",
status:[]
};
简化代码
function addPerson(_person){
var people = Iee.dashboard.analytics.data.people.data;
people[_person.Id_Emp] = people[_person.Id_Emp] || {
profile : _person,
status : []
};
people[_person.Id_Emp].status.push({Id_Emp : _person.Id_Emp, status : _person.Estatus1, estatusby : _person.Centro_de_trabajo});
addBlackList(_person);
}
在这种情况下,你希望它是一个对象或未定义的,而不是字符串,数字等,所以你可以检查它是否有一个真值。
function addPerson(_person) {
var people = Iee.dashboard.analytics.data.people.data,
person = people[_person.Id_Emp];
if (!person) person = {
profile: _person,
status: []
};
person.status.push({
Id_Emp: _person.Id_Emp,
status: _person.Estatus1,
estatusby: _person.Centro_de_trabajo
});
addBlackList(_person);
}
这应该比其他答案中提到的冗余检查执行得稍微好一些,因为它只会在(真)值不存在的情况下才会给变量赋值。
只是为了好玩,这里有一个超浓缩的版本:
function addPerson(_person) {
var people = Iee.dashboard.analytics.data.people.data, id = _person.Id_Emp;
(people[id] || { profile: _person, status: [] }).status.push({
Id_Emp: id, status: _person.Estatus1, estatusby: _person.Centro_de_trabajo
});
addBlackList(_person);
}
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- AngularJs 检查是否未定义和空的最佳实践
- 检查链接对象形式中未定义属性的最佳实践是什么
- 哪种方法代表了 JavaScript 中空对象引用的最佳实践,null 或未定义
- Ajax从JSON返回未定义-登录系统&最佳实践
- 什么'在处理多级对象时,确保JavaScript对象已设置且未定义的最佳实践
- 对象未定义时的最佳实践
- 检查未定义变量的最佳JS实践是什么
- 如果变量未定义,try / catch是防止错误发生的最佳方法之一吗?
- 用于一系列空/未定义检查的Javascript最佳实践
- 本地存储最佳分数未定义/无值
- 替换数组中缺失/未定义值的最佳方法