!this.hasOwnProperty('myObj')
//因使用this,所以变量定义在window下面了 typeof myObj == "undefined"
myObj === undefined //window下的变量 直接访问会报错:uncaught ReferenceError: a is not defined //所以重新定义了一组 变量c,d
typeof myObj == "undefined";
// typeof 检测出来的结果无论是什么都是一个字符串类型的结果
// 如果此时 myObj 存在 => 相当于 : typeof {} == "undefined" -> "object" == "undefined" -> false
// 如果此时 myObj 不存在 => 相当于 : typeof null == "undefined" -> "null" == "undefined" -> false
// 不论 myObj 是否存在该判断语句都返回 false 所以 A 错。 myObj === undefined;
// 如果此时 myObj 存在 => 相当于 : {} === undefined -> 【三个等于是严格等于不会进行数据类型转换】-> false
// 如果此时 myObj 不存在 => 相当于 : null === undefined -> false【三个等于与两个等于的区别要注意】 -> false
// 不论 myObj 是否存在该判断语句都返回 false 所以 B 错。 myObj === null;
// 如果此时 myObj 存在 => 相当于 : {} === null -> false
// 如果此时 myObj 存在 => 相当于 : null === null -> true
// myObj 存在返回 false , 不存在返回 true 所以 C 对。 !this.hasOwnProperty('myObj');
最后一个选项败在这个取反操作符上了! // 例一:如果obj不存在,就进入if语句里(obj只声明,未赋值情况下)
var obj;
if(obj === undefined ){
... //能进入这个if语句
}
// 例二:如果obj不存在,就进入if语句里(obj只声明,未赋值情况下)
var obj;
if( typeof obj == 'undefined' ){
... //能进入这个if语句
}
// 例三:如果obj不存在,就进入if语句里
if(obj === null ){ //其实obj是不存在的,但是obj === null结果是false
... //故不能进入这个if语句
}
// 例四:如果obj不存在,就进入if语句里(obj未声明的情况下)
if(!this.hasOwnProperty('obj')){
... //能进入这个if语句
}
!this.hasOwnProperty('myObj') this是什么?this是动态的!hasOwnPrototype 查找自身是否有该属性,这个不是很严格,我不同意它是正确的