Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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:对象的奇怪行为_Javascript - Fatal编程技术网

JavaScript:对象的奇怪行为

JavaScript:对象的奇怪行为,javascript,Javascript,有人能解释一下这背后的确切逻辑吗 var person={fname:"John",lname:"Doe",age:25}; person.fname; //it gives a output John for (x in person) { alert(person[x]); //works fine person.x; //incorrect why??? } 在循环中,x假设三个不同的值:fname、lname和age。通过执行person[x]您试图访问三个不同

有人能解释一下这背后的确切逻辑吗

var person={fname:"John",lname:"Doe",age:25};
person.fname; //it gives a output John

for (x in person)
  {
  alert(person[x]); //works fine
  person.x;    //incorrect why???
  }
在循环中,x假设三个不同的值:fname、lname和age。通过执行
person[x]
您试图访问三个不同的属性。这就像做
person['fname']
person['lname']
person['age']
。它们与
person.fname
person.lname
person.age
相同,都是person对象的定义属性。如果您执行
person.x
操作,则尝试访问未声明的属性
x
,该属性正确返回
undefined

[]
的用法也被称为括号表示法,这在迭代和其他事情中是需要的,例如为用户输入的对象设置动态属性(例如),但它们的使用范围很大

在循环中,x假设三个不同的值:fname、lname和age。通过执行
person[x]
您试图访问三个不同的属性。这就像做
person['fname']
person['lname']
person['age']
。它们与
person.fname
person.lname
person.age
相同,都是person对象的定义属性。如果您执行
person.x
操作,则尝试访问未声明的属性
x
,该属性正确返回
undefined


[]
的用法也被称为括号表示法,在迭代和其他情况下,如为用户输入的对象设置动态属性(例如),但是它们有很大的使用范围。

这是因为Javascript无法决定是要访问object person的x
属性(例如,如果person={x:100,y:65}),还是字符串值的属性

  • 人员[x]将评估x的值
  • person.x将接管财产x

这是因为Javascript无法决定是否要访问对象person的x
属性(例如,如果person={x:100,y:65}),或字符串值的属性

  • 人员[x]将评估x的值
  • person.x将接管财产x

person.fname
将为您提供
fname
对象的
person
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
person.lname
将为您提供
person
对象的
lname
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
person.age
将为您提供
age
对象的
person
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
它将遍历person对象。 而在
person.x中“x”是person对象的未知属性


最好您先了解一些基本的javascript概念,然后。

person.fname
将为您提供
fname
对象的
person
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
person.lname
将为您提供
person
对象的
lname
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
person.age
将为您提供
age
对象的
person
对象

var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}
它将遍历person对象。 而在
person.x中“x”是person对象的未知属性


你最好先了解一些基本的javascript概念,并且。

person.x
的工作方式与
person.fname
的工作方式完全相同(你似乎对此没有意见)。我认为如果你也解释一下为什么你认为这个行为很奇怪,“person.x”不正确,可能会更好,因此,其他偶然发现这个问题的JavaScript学习者可以从您的经验中学习。
person.x
的工作方式与
person.fname
的工作方式完全相同(您似乎对此没有意见)。我认为,如果您也解释一下为什么您认为该行为奇怪而“person.x”不正确,可能会更好,因此,其他偶然发现这个问题的JavaScript学习者可以从您的经验中学习。