我知道我们可以截断一个数组(不确定它是最好的方法!)
var person = ["John", "Doe", 50, "blue"]
person = [];
现在可以告诉我如何截断对象吗?
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
这样的事情有用吗?
var person = {
firstName:"",
lastName:"",
age:,
eyeColor:""
};
有没有更好更快的方法呢?
答案 0 :(得分:1)
您发布的内容不正确,因为您只是将新数组分配给存储前一个数组的变量 ...这样做会丢失内存引用使用上一个数组...
var persons = ['Hitmands', 'You', 'ecc...'];
persons = []; // this is a new array not the previous array whitout values.
在许多情况下,这是你需要的,但是如果你需要使用人员阵列保留内存参考......你不能!
因此,使数组为空而不丢失内存引用的正确方法是:
var persons = ['Hitmands', 'You', 'ecc...'];
persons.length = 0;
使用 Object 获取相同的内容有点困难,因为 Objects 没有任何 length (或类似)属性(或方法)。
所以,您可以执行以下操作:
var Person = (function() {
function Person(name, job, hobbies) {
this.name = name;
this.job = job;
this.hobbies = this.hobbies.concat(hobbies);
}
Person.prototype.name = '';
Person.prototype.job = '';
Person.prototype.hobbies = [];
Person.reset = function(person) {
for(var i in person) {
if(!person.hasOwnProperty(i)) { continue; }
person[i] = Person.prototype[i];
}
};
return Person;
})();
var hitmands = new Person('Hitmands', 'Frontend Developer', ['Javascript', 'Photography', 'Guitar', 'Rock']);
console.log('hitmands is:', JSON.stringify(hitmands));
Person.reset(hitmands)
console.log('now hitmands is:', JSON.stringify(hitmands));
答案 1 :(得分:1)
最快的方法是:
person = { };
此解决方案的问题是所有参数都将未定义。
在某些情况下, undefined 和 null 会有不同的含义,主要是前者表示遗漏参数,后者表示参数值已自愿设定 null ,这在某些情况下可能有意义。
此外,最佳方法还取决于您的实际代码和软件架构。举个例子,如果你在某个地方有多个对该对象的引用,那么你实际上并没有使它失效,这样你就可以肯定会遇到烦人的错误。
那就是说,可能的替代方法如下:
for(var prop in person) {
if(person.hasOwnProperty(prop)) {
person[prop] = null;
}
}
这既不是唯一的,也不是最好的,但可能是一个很好的起点。