With a JavaScript Array, I can reset it to an empty state with a single assignment:
array.length = 0;
This makes the Array \"appear\" empty
Something new to think about looking forward to Object.observe in ES7 and with data-binding in general. Consider:
var foo={
name: "hello"
};
Object.observe(foo, function(){alert('modified');}); // bind to foo
foo={}; // You are no longer bound to foo but to an orphaned version of it
foo.name="there"; // This change will be missed by Object.observe()
So under that circumstance #2 can be the best choice.