首页 > 试题广场 >

下面判断对象myObj是否存在的写法错误的是( )

[单选题]
下面判断对象myObj是否存在的写法错误的是( )
  • typeof myObj == "undefined"
  • myObj === undefined
  • myObj === null
  • !this.hasOwnProperty('myObj')
前提是myobj是一个对象,只是存在与不存在的问题,几种表示方法:
1、!obj
2、!window.obj
3、typeof myObj == "undefined(判断对象是否有定义,已定义未赋值,返回true)
4、myObj == undefined(已定义未赋值。返回true)
5、myObj === undefined (已定义未赋值,返回true)
6、!this.hasOwnProperty('myObj'))(判断是否为顶层对象的一个属性)
7、myobj == null(注意null与undefined的区别,ull指的是已经赋值为null的空对象,即这个对象实际上是有值的,而undefined指的是不存在或没有赋值的对象。)
以上几种都正确,但是我用的最多争议最少的是第三种
编辑于 2019-09-23 14:13:41 回复(12)

a答案的 undefiNed 应该不用双引号

发表于 2019-06-29 21:05:34 回复(3)
只有null===null时,结果为true;
其余类型与null,比较时结果都为false。
所以使用  myObj===null时,myObj的类型是不确定的,不能判断myObj是否是对象,更不能判断对象是否存在。
即使前提是myObj要么是存在的对象,要么是不存在的对象,和null比较都为false,所以不能判断对象是否存在。
-------------------------------------------------------------------------------------------------------
补充:其余答案为什么正确,判断条件对于对象存在和不存在时是互斥的。
前提:myObj要么是存在的对象(形如{},{xxx:yyy}),要么是不存在的对象(只定义未赋值的变量)
  • !this.hasOwnProperty('myObj')
    //因使用this,所以变量定义在window下面了
  • typeof myObj == "undefined"

  • myObj === undefined
    //window下的变量 直接访问会报错:uncaught ReferenceError: a is not defined
    //所以重新定义了一组 变量c,d


编辑于 2022-07-18 22:48:53 回复(2)
首先明白题意 : 这道题的意思是 : myObj 这个对象是否存在 ? (言外之意该对象以前至少存在过只不过现在不确定了, 而不是去纠结它声明与定义, 因为以前一定是定义过,这不过现在不确定了, 问你怎么才能检测一下这个对象还存在呢吗?? ?? -> 人家是问的这个意思 : )
解题思路 : 
  • 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');
    最后一个选项败在这个取反操作符上了!

发表于 2020-03-08 11:43:29 回复(8)
D选项为啥要在前面加一个非啊 ,直接用hasOwnProperty判断的结果不就可以吗?
发表于 2019-08-27 13:55:40 回复(1)
B应该也是错误的吧,我用代码验证直接报错
发表于 2019-09-05 20:00:31 回复(0)
判断对象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语句
}   
    
    

发表于 2022-01-19 10:01:32 回复(0)

chrome运行

发表于 2019-10-10 00:06:07 回复(0)
对象 undefined
发表于 2019-08-08 19:51:20 回复(0)
!this.hasOwnProperty('myObj') this是什么?this是动态的!hasOwnPrototype 查找自身是否有该属性,这个不是很严格,我不同意它是正确的
发表于 2021-02-09 11:38:42 回复(1)

判断对象myObj是否存在的写法,下面说法错误的是( )

  • typeof myObj == "undefined"
  • myObj === undefined
  • myObj === null
  • !this.hasOwnProperty('myObj')
    不严谨啊. 对象myObj 是否存在指的是未声明还是为null啊.
    为null C是对的啊. 题目明明是错误的是
    未声明 A是对的(依然不严谨)
发表于 2020-07-06 22:23:17 回复(0)
如果myObj是其他非对象的类型,B也是不可以判断的吧,还是说myObj已经默认是个object了
发表于 2020-02-29 13:40:03 回复(0)
我管你存在不存在,直接 var obj = myObj || {} 你传过来的一定是对象或者是null,undefined,“”,0,false,NaN,吧
编辑于 2024-03-21 14:52:28 回复(0)
对象不存在时,其值通常为undefined。null通常表示一个变量或属性的值被明确地赋值为null,表示空值。
发表于 2023-03-13 09:46:14 回复(1)
题目没看懂

发表于 2022-09-01 16:09:26 回复(0)
myObj不存在是undefined
发表于 2022-08-18 17:24:20 回复(0)
本题意思理解为如何判断myObj是否为未定义比较妥当,因为如果是未声明的变量,编译器会报错,轮不到我们来判断。 A选项,myObj未定义,typeof返回字符串 B选项,myObj本身即未定义 C选项,null表示等待赋值的变量,是存在的。 D选项,这个选项有问题,需要把单引号去掉才能判断准确,不知原因
发表于 2022-04-12 21:08:23 回复(0)
    <script>
    //    var myObj={};
       /*方法1:*/
       if(!myObj){
           console.log(!myObj);
           var myObj={};
       }
       /*方法2:*/
       if(!window.myObj){
           console.log(!window.myObj);
           var myObj={};
       }
       /*方法3:*/
       if(!this.myObj){
           console.log(!this.myObj);
           this.myObj={};
       }
       /*方法4:*/
       var global=this;
       if(!global.myObj){
           console.log(!global.myObj);
           global.myObj={};
       }
       /*方法5:*/
       if(typeof myObj=="undefined"){
           console.log(typeof myObj=="undefined");
           var myObj={};
       }
       /*方法6:*/
       if(myObj==undefined){
           console.log(myObj==undefined);
           var myObj={};
       }
       /*方法7:*/
       if(myObj===undefined){
           console.log(myObj===undefined);
           var myObj={};
       }
       /*虽然运行结果正确,但是从语义上看,
       这种判断方法是错的,应该避免。
       null是已经赋值为null的空对象,这个对象实际上是有值的
       所以使用精准比较===也会是错的*/
       /*方法8:*/
       if(myObj==null){
           console.log(myObj==null);
           var myObj={};
       }
       /*方法9:*/
       if(!('myObj' in window)){
           console.log(!('myObj' in window));
           window.myObj={};
       }
       /*方法10:*/
       if(!this.hasOwnProperty('myObj')){
           console.log(!this.hasOwnProperty('myObj'));
           this.myObj={};
       }
    </script>
10种方法判断对象是否存在
发表于 2022-03-02 15:57:27 回复(0)
对象和变量名,对象不存在,不就是变量名指向null吗?
为啥C不对
发表于 2021-12-25 00:01:12 回复(0)