var foo;
alert(!foo);//undefind情况下或者null,一个感叹号返回的是true;
alert(!goo);//undefind情况下,一个感叹号返回的也是true; 但是这里会报undefind的错误
var o={flag:true};
var test=!!o.flag;//等效于var test=o.flag||false;
alert(test); //返回true
var test2=!!o.flag1;//当里面没有对象时
alert(test2);//返回false
var test3=!!b.flag;//当连b这个对象都没有时
alert(test3);//返回false
所以可以发现,!!两个感叹号多用于判断对象的存在。