我有以下javascript函数-
function ResponseVal()
{
this.value1;
this.value2;
}
var Response = new ResponseVal();
我尝试在 chrome 控制台栏中执行上述代码。我不明白为什么新创建的对象“响应”不显示属性 value1 和 value2。谁能帮我理解正在发生的事情以及为什么没有显示属性。
我有以下javascript函数-
function ResponseVal()
{
this.value1;
this.value2;
}
var Response = new ResponseVal();
我尝试在 chrome 控制台栏中执行上述代码。我不明白为什么新创建的对象“响应”不显示属性 value1 和 value2。谁能帮我理解正在发生的事情以及为什么没有显示属性。
您应该将值设置为某个值。您所做的只是尝试在构造函数中读取它们。
function ResponseVal()
{
this.value1 = "";
this.value2 = "";
}
var Response = new ResponseVal();
它们仍然是未定义的。它们仅在定义后才存在。
您需要将值分配给 value1 和 value2,至少为“null”。
声明一个属性而不设置它基本上什么都不做。虽然它不会导致错误,但一些解释器会抛出警告——我相信严格模式也会如此。
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 对使用未定义的变量是无情的,但它不在乎你是否尝试使用未定义的属性。