如何访问JavaScript对象的属性?

时间:2009-06-18 09:14:14

标签: javascript scripting

在审核javascript编码时,我看到了

var detailInf = {
  "hTitle":"Results",
  "hMark":"98"
};

这个js编码背后的概念是什么?同时警告变量显示为“[object Object]”。所以这是一个对象,那么我们如何访问变量并显示该对象的数据。

4 个答案:

答案 0 :(得分:8)

尝试这样做:

alert(detailInf['hTitle']);
alert(detailInf.hTitle);

两者都会提醒“结果” - 这是一个Javascript对象,可以用作各种字典。

必读:Objects as associative arrays

作为一个脚注,当你搞乱Javascript时,你应该得到Firebug。然后你可以只console.log(detailInf);,你就可以在控制台中得到一个很好的映射显示对象。

答案 1 :(得分:4)

这种形式的JavaScript对象称为对象文字,就像数组文字一样。例如,以下两个数组声明是相同的:

var a = [1, 2, 3];          // array literal
var b = new Array(1, 2, 3); // using the Array constructor

如上所述,可以通过多种方式声明对象。其中一个是对象文字,您可以在其中声明属性以及对象:

var o = {property: "value"}; // object literal

相当于:

var o = new Object; // using the Object constructor
o.property = "value";

也可以从构造函数创建对象。像这样:

var Foo = function() {
    this.property = "value";
};

var o = new Foo;

添加方法

正如我刚才在评论中所说,这种声明JavaScript对象的形式不是JSON格式。 JSON是一种数据格式,不允许函数作为值。这意味着以下是有效的JavaScript对象文字,但不是有效的JSON格式:

var user = {
    age : 16,

    // this is a method
    isAdult : function() {
        // the object is referenced by the special variable: this
        return this.age >= 18;
    }
};

此外,属性的名称不必括在引号内。但是,这在JSON中是必需的。在JavaScript中,我们将它们括在括号中,其中属性名称是保留字,例如classwhile等。所以以下内容也是等效的:

var o = {
    property : "value",
};

var o = {
    "property" : "value",
};

此外,密钥也可以是数字:

var a = {
    0 : "foo",
    1 : "bar",
    2 : "abz"
};

alert(a[1]); // bar

类似数组的对象

现在,如果上面的对象也有length属性,它将是一个类似于object的数组:

var arrayLike = {
    0 : "foo",
    1 : "bar",
    2 : "baz",

    length : 3
};

类似数组意味着它可以使用正常的迭代结构(for,while)轻松迭代。但是,您无法在其上应用数组方法。像array.slice()。但这是另一个话题。

方括号表示法

正如Paolo Bergantino所说,您可以使用点表示法以及方括号表示法访问对象的属性。例如:

var o = {
    property : "value"
};

o.property;
o["property"];

你想什么时候使用另一个?当动态确定属性名称时,人们使用方括号表示法,如下所示:

var getProperty = function(object, property) {
    return object[property];
};

或者,当属性名称是JavaScript保留字时,例如while

object["while"];
object.while; // error

答案 2 :(得分:3)

这是JSON格式中的对象。那是javascript object literal。基本上,:左边的位是属性名,右边的位是属性值。那么,你所拥有的是一个名为detailInf的变量,它有两个属性,hTitlehMarkhTitle的值为结果,hMark的值为98。

var detailInf = { "hTitle":"Results", "hMark":"98"};
alert(detailInf.hTitle); //should alert "Results"
alert(detailInf.hMark); //should alert "98

编辑 Paolo的答案更好: - )

答案 3 :(得分:1)

正如Dan F所说,这是一个JSON格式的对象。要遍历对象的所有属性,您可以执行以下操作:

for (var i in foo) {
    alert('foo[' + i + ']: ' + foo[i]);
}