3

我有以下javascript函数-

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


var Response = new ResponseVal();

我尝试在 chrome 控制台栏中执行上述代码。我不明白为什么新创建的对象“响应”不显示属性 value1 和 value2。谁能帮我理解正在发生的事情以及为什么没有显示属性。

4

4 回答 4

4

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

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


var Response = new ResponseVal();
于 2013-08-15T14:31:04.383 回答
0

它们仍然是未定义的。它们仅在定义后才存在。

于 2013-08-15T14:31:08.527 回答
0

您需要将值分配给 value1 和 value2,至少为“null”。

于 2013-08-15T14:32:42.017 回答
0

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

JavaScript 并没有使这一点立即显而易见。例如,如果您这样做:

function Hello() { 
    this.value1;
}

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

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

undefined当您尝试访问不存在的属性时,JavaScript 不会抛出错误,而是会返回。所以如果你写,你会得到相同的结果,比如:

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 对使用未定义的变量是无情的,但它不在乎你是否尝试使用未定义的属性。

于 2013-08-15T15:12:34.870 回答