当没有定义object属性时,console.log(obj.property)给出" undefined",为什么?

时间:2016-08-01 08:38:33

标签: javascript javascript-objects

让我们说,



    var obj = {
      name: "AKS"
    };
    console.log(obj.name);
    console.log(obj.lname);




输出:

     AKS
     undefined

如果我们这样做,还有其他地方:



var func = function() {
  var name = "AKS";
};
console.log(name);




输出:

error: name is not defined
  1. 在第一个片段中,未定义obj属性lname。那为什么呢 不会抛出错误?
  2. 在第二个代码段中,未定义名称 功能范围,也不在全球范围内。因此错误是 预期。
  3. 两者之间的基本区别是什么? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这就是定义行为的方式。如果访问对象上的未定义属性,则返回值undefined。但是如果你试图使用一个不存在的本地定义的符号名称(a.k.a。变量),即从未定义过,那就是错误。

为什么语言设计师决定最好通过尝试访问该属性来测试是否存在属性,这是任何人的猜测。但是,抛出错误的不存在的变量是跨语言的非常标准的行为。

请注意,未定义的属性行为不适用于所有类型。最值得注意的是,您无法访问undefined上的属性,它会产生错误。因此foo.bar.baz barundefined会产生错误。

答案 1 :(得分:-1)

如果您使用严格模式,它会给您错误,然后对象为sealedfrozen