如果从数组中获取对象,则无法访问属性

时间:2015-09-12 17:19:51

标签: javascript

这输出"值",而在注释掉的行中,它是"未定义"。那是为什么?

<!DOCTYPE html>
<html>
<body>
<script>

function Obj(property) {
    this.property = property;
}

var arr = [new Obj("value")]
var obj = new Obj("value");
//var obj = arr.splice(0, 1);
console.log(obj.property);

</script>
</body>
</html>

3 个答案:

答案 0 :(得分:3)

那是因为splice()返回一个元素数组:

console.log(obj[0].property);

根据documentation (我加粗了与你的例子有关的重要部分)

  

包含已删除元素的数组。 如果只删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。

工作示例

function Obj(property) {
    this.property = property;
}

var arr = [new Obj("value")]
var obj = arr.splice(0, 1);
console.log(obj[0].property);
// "value"

答案 1 :(得分:2)

这是因为splice根据给定的参数返回提取的数组,因此obj成为包含元素的数组。所以你必须使用 的console.log(OBJ [0] .property);

答案 2 :(得分:0)

splice()函数返回带有拼接项的数组。所以访问你应该做的财产:

var obj = arr.splice(0, 1)[0]; // extract the object first
console.log(obj.property);

OR

var obj = arr.splice(0, 1);
console.log(obj[0].property);

OR

var obj = arr[0];
console.log(obj.property);