这可能是基本的javascript问题,但我想了解js如何在内部工作。
const obj = { a: 'a'};
if(obj)
console.log('obj is not undefined');
else
console.log('obj is UNDEFINED');
if(obj.a)
console.log('obj.a is not undefined');
else
console.log('obj.a is UNDEFINED');
if(obj.b)
console.log('obj.b is not undefined');
else
console.log('obj.b is UNDEFINED');
if(newObj)
console.log('newObj is not undefined');
else
console.log('newObj is UNDEFINED');
执行这些语句时得到的输出是
obj is not undefined
obj.a is not undefined
obj.b is UNDEFINED
Uncaught ReferenceError: newObj is not defined
为什么newObj抛出ReferenceError和obj.b没有抛出任何错误?
答案 0 :(得分:1)
因为没有newObj这样的东西。没有对象。变量本身从未初始化,因此它不存在。
undefined是一个特殊值,可以赋值给变量。但是,如果没有定义变量,则抛出ReferenceError。
访问obj.b意味着您已经拥有一个名为obj的变量引用的对象。这个对象基本上是一个哈希,它可以有很多属性。当属性不存在或其值未定义时,则返回undefined。
请参阅MDN - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
答案 1 :(得分:1)
在if语句,while语句等上,键入null值,0(整数0),undefined,false(布尔值为false)和NaN(不是数字)计为false,
否则算作真实,例如除0以外的整数,true(布尔值为true),字符串,等等...
因此,当您执行if (obj){...}
时,obj返回一个对象值类型,该类型不是计为false的5值之一,然后将执行if语句。
执行代码if (obj.a){...}
时,obj.a返回一个字符串,然后计为真实
当执行代码if(obj.b){...}
时,obj.b返回一个未定义的值类型,然后计为false并且不会执行if语句,但它会执行else语句。它也用于执行if(newObj){...}
答案 2 :(得分:0)
使用
'undefined' === typeof newObj
检查是否存在,我的朋友。
答案 3 :(得分:0)
内存中没有“newObj”,因此它会抛出未捕获的ReferenceError。
虽然我们的记忆中有'obj'。所以,当你问'obj.b'时,它会在字典'obj'中搜索关键'b'。所以它没有价值,那么它将是未定义的。
由于
答案 4 :(得分:0)
这是因为你已经定义了obj.So检查obj是否有b从不引发引用错误。因为obj.b
具有名为undefined的特殊值,所以它由JavaScript自动处理。因此,您可以通过if(obj.b===undefined)
检查未定义的密钥。如果要检查对象是否未定义,则可以使用if( typeof newObj==='undefined')
。