Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当未定义对象属性时,console.log(obj.property)给出;未定义的“;,为什么?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 当未定义对象属性时,console.log(obj.property)给出;未定义的“;,为什么?

Javascript 当未定义对象属性时,console.log(obj.property)给出;未定义的“;,为什么?,javascript,javascript-objects,Javascript,Javascript Objects,假设我们有 var obj={ 名称:“AKS” }; 控制台日志(对象名称); 控制台日志(obj.lname)这就是行为的定义方式。如果访问对象上的未定义属性,它将返回值undefined。但是如果您试图使用一个不存在的本地定义的符号名(也称为变量),即从未定义过的符号名,则这是一个错误 为什么语言设计者认为测试一个属性是否存在最好是通过尝试访问该属性来完成,这是任何人的猜测。然而,不存在的变量抛出错误是跨语言的标准行为 请注意,未定义的属性行为并不适用于所有类型。最值得注意的是,您无法访

假设我们有

var obj={
名称:“AKS”
};
控制台日志(对象名称);

控制台日志(obj.lname)这就是行为的定义方式。如果访问对象上的未定义属性,它将返回值
undefined
。但是如果您试图使用一个不存在的本地定义的符号名(也称为变量),即从未定义过的符号名,则这是一个错误

为什么语言设计者认为测试一个属性是否存在最好是通过尝试访问该属性来完成,这是任何人的猜测。然而,不存在的变量抛出错误是跨语言的标准行为


请注意,未定义的属性行为并不适用于所有类型。最值得注意的是,您无法访问
未定义的
上的属性,这将产生错误。所以
foo.bar.baz
其中
bar
未定义的
将产生错误。

如果使用严格模式,它可能会给您错误,然后对象是或。

在javascript中它不会这样做。如果“严格使用”;则,当对未声明的变量执行读取操作时,会抛出错误,但是,如果对未声明的变量执行写入操作,则该变量将被置于全局范围内,并对该变量执行写入操作。
中还有
运算符。@Aks,gca Yes,对于更详细的行为有一千个警告…但是,我不打算在这里背诵整个ECMAScript规范和所有使用模式。我理解这一点,但我想理解这里的行为。谢谢,我终于找到了答案。当解释器发现一个对象试图访问一个属性(
newObj.prop
)时,它首先查看该属性是否直接定义在该对象上。如果未找到,它将查找Prototype对象。如果找到该值,则重新运行该值,否则返回
undefined