我有以下javascript函数 -
function ResponseVal()
{
this.value1;
this.value2;
}
var Response = new ResponseVal();
我尝试并执行chrome consolebar中的上述代码。我无法理解为什么新创建的对象“Response”不显示属性value1和value2。任何人都可以帮助我理解它发生了什么以及为什么没有显示属性。
答案 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对于使用未定义的变量是不可原谅的,但是如果你尝试使用未定义的属性则无关紧要。