javascript对象属性未显示

时间:2013-08-15 14:29:14

标签: javascript

我有以下javascript函数 -

function ResponseVal()
{
    this.value1;
    this.value2;
} 


var Response = new ResponseVal();

我尝试并执行chrome consolebar中的上述代码。我无法理解为什么新创建的对象“Response”不显示属性value1和value2。任何人都可以帮助我理解它发生了什么以及为什么没有显示属性。

4 个答案:

答案 0 :(得分:4)

您应该将值设置为某个值。你所做的就是尝试在构造函数中读取它们。

function ResponseVal()
{
    this.value1 = "";
    this.value2 = "";
} 


var Response = new ResponseVal();

答案 1 :(得分:0)

它们仍未定义。它们只有在定义后才存在。

答案 2 :(得分:0)

您需要至少为value1和value2,'null'赋值。

答案 3 :(得分:0)

声明属性而不设置它基本上什么都不做。虽然它不会导致错误,但我相信一些解释器会发出警告 - 严格模式也是如此。

JavaScript并没有立即显现出来。例如,如果您这样做:

function Hello() { 
    this.value1;
}

var h = new Hello;
alert(h.value1);

警报将显示为undefined。但是,属性value1从未实际访问过 - 它根本不存在,因为您没有为它提供值。

每次尝试访问不存在的属性时,JavaScript都会返回undefined,而不是抛出错误。如果你写的话,你会得到相同的结果,比如说:

alert(h.property_that_doesnt_exist);   //alerts 'undefined'

迭代h的属性清楚地表明属性value1不存在:

for (var key in h) {
    alert(key + ' = ' + h[key]);
}

这不会发出任何警报,因为找不到任何属性。但是,如果将属性设置为JS原语undefined,则属性将存在:

function Hello() { 
    this.value1 = undefined;
}

var h = new Hello;

for (var key in h) {
    alert(key + ' = ' + h[key]);  //alerts 'undefined'
}

您可以在此处运行上述代码:http://jsfiddle.net/Acdmn/


但是没有充分的理由将属性/变量设置为undefined。要创建具有“空”值的属性,JavaScript程序员通常使用null

function Hello() { 
    this.value1 = null;
}

这清楚表明该属性是故意创建的,但您还没准备好给它一个有意义的值。


最后,请注意,属性定义与使用var显式设置的“普通”(私有)变量的工作方式不同(即使这些也是属性,在window对象的情况下)。如果你写:

var foo;
alert(foo);
alert(some_undefined_variable_name);

第一个提醒会说undefined。变量foo 创建的,确实存在,并且包含原始值undefined(即使您没有明确设置它)。但是,第二个警报将引发参考错误:

ReferenceError: some_undefined_variable_name is not defined

因此JavaScript对于使用未定义的变量是不可原谅的,但是如果你尝试使用未定义的属性则无关紧要。