var name = {
nameValue: 'John'
};
console.log(name.nameValue); // undefined
var surname = {
surnameValue: 'Doe'
};
Object.assign(name, surname);
console.log(name.surnameValue); // undefined
我在使用var时得到了不确定但是一切都很好用let和 我在jsbin.com上运行此代码
答案 0 :(得分:5)
全局范围(在本例中为window
)已具有属性name
。您需要通过使用函数包装代码来创建新范围。或者使用块范围变量声明let
console.log(typeof name); // string
var name = {
nameValue: 'John'
};
console.log(name.nameValue); // undefined
var surname = {
surnameValue: 'Doe'
};
Object.assign(name, surname);
console.log(name.surnameValue); // undefined
function run() {
var name = {
nameValue: 'John'
};
console.log(name.nameValue); // John
var surname = {
surnameValue: 'Doe'
};
Object.assign(name, surname);
console.log(name.surnameValue); // Doe
}
run();
答案 1 :(得分:0)
因为' name'在窗口中存在,您可以使用其他变量名称
var name0 = {
nameValue: 'John'
};
console.log(name0.nameValue);
答案 2 :(得分:0)
(Window.)name是全局window
对象的特定值,可用于(但非常罕见),用于设置表单和超链接目标。
name
属性不是只读属性,但仅限于基本类型string
。因此,您分配给window.name
的任何值都将变为字符串。
这就是使用undefined
时获得name.nameValue
的原因。 name
不是对象。
var name = { hello: "world!" };
console.log(name + ' - ' + name.hello); // "[object Object] - undefined"
var name = "Hello World!"
console.log(name); // "Hello World!";
答案 3 :(得分:-1)
您正在name
对象的全局范围内设置变量window
。在window对象中设置name的值时,其get
方法将调用toString
方法。
如here
中所述var name = {first:"Vignesh"};
console.log(name); //(1)
console.log(name.first); //(2)
(1)会将值[object Object]
作为字符串而不是{first: "Vignesh"}
。
(2)描述了您正在访问字符串的未分配属性。即,[object Object].first
变为undefined
。
您必须在if...else block
,function block
之类的其他范围内声明名称对象,以实现您的需求。