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
范围(即 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();
因为窗口中存在"name",所以你可以使用变量的其他名称
var name0 = {
nameValue: 'John'
};
console.log(name0.nameValue);
(Window.(name 是全局 window
对象的特定值,可用于(但非常罕见(设置表单和超链接目标。
name
属性不是只读的,而是仅限于基元类型 string
。因此,分配给window.name
的任何值都将变为字符串。
这基本上就是为什么您在name.nameValue
使用时会undefined
的原因。 name
不是对象。
var name = { hello: "world!" };
console.log(name + ' - ' + name.hello); // "[object Object] - undefined"
var name = "Hello World!"
console.log(name); // "Hello World!";
您正在window
对象的全局范围内设置变量name
。在窗口对象中设置 name 的值时,其get
方法将调用 toString
方法。
如此处所述
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
(中声明 name 对象,function block
以实现所需的内容。