Javascript 使用“时未定义”;var";而不是",;让我们;使用Object.assign()

Javascript 使用“时未定义”;var";而不是",;让我们;使用Object.assign(),javascript,Javascript,我在使用var时没有定义,但是使用let和 我正在jsbin.com上运行此代码全局范围(即本例中的窗口)已具有属性名称。您需要通过使用函数包装代码来创建新的作用域。或者使用块作用域变量声明let console.log(名称类型);//一串 变量名称={ nameValue:'约翰' }; console.log(name.nameValue);//未定义 变量姓氏={ 姓氏值:“Doe” }; Object.assign(姓名); console.log(name.namesvalue);

我在使用var时没有定义,但是使用let和 我正在jsbin.com上运行此代码

全局范围(即本例中的
窗口
)已具有属性
名称
。您需要通过使用函数包装代码来创建新的作用域。或者使用块作用域变量声明
let

console.log(名称类型);//一串
变量名称={
nameValue:'约翰'
};
console.log(name.nameValue);//未定义
变量姓氏={
姓氏值:“Doe”
};
Object.assign(姓名);
console.log(name.namesvalue);//未定义
函数运行(){
变量名称={
nameValue:'约翰'
};
console.log(name.nameValue);//John
变量姓氏={
姓氏值:“Doe”
};
Object.assign(姓名);
console.log(name.namesvalue);//Doe
}
run()
全局作用域(即本例中的
窗口
)已具有属性
名称
。您需要通过使用函数包装代码来创建新的作用域。或者使用块作用域变量声明
let

console.log(名称类型);//一串
变量名称={
nameValue:'约翰'
};
console.log(name.nameValue);//未定义
变量姓氏={
姓氏值:“Doe”
};
Object.assign(姓名);
console.log(name.namesvalue);//未定义
函数运行(){
变量名称={
nameValue:'约翰'
};
console.log(name.nameValue);//John
变量姓氏={
姓氏值:“Doe”
};
Object.assign(姓名);
console.log(name.namesvalue);//Doe
}

run()因为窗口中存在“name”,所以可以使用变量的其他名称

var name = {
  nameValue: 'John'
};
console.log(name.nameValue);  // undefined
var surname = {
  surnameValue: 'Doe'
};
Object.assign(name, surname);
console.log(name.surnameValue); // undefined

因为“name”存在于窗口中,所以可以使用变量的其他名称

var name = {
  nameValue: 'John'
};
console.log(name.nameValue);  // undefined
var surname = {
  surnameValue: 'Doe'
};
Object.assign(name, surname);
console.log(name.surnameValue); // undefined
是全局
窗口
对象的特定值,可用于设置窗体和超链接目标(但非常少见)

name
属性不是只读的,而是仅限于基本类型
string
。因此,您分配给
window.name
的任何值都将变成字符串

这就是使用
name.nameValue
时得到
undefined
的基本原因<代码>名称
不是对象

var name0 = {
  nameValue: 'John'
};
console.log(name0.nameValue);
是全局
窗口
对象的特定值,可用于设置窗体和超链接目标(但非常少见)

name
属性不是只读的,而是仅限于基本类型
string
。因此,您分配给
window.name
的任何值都将变成字符串

这就是使用
name.nameValue
时得到
undefined
的基本原因<代码>名称不是对象

var name0 = {
  nameValue: 'John'
};
console.log(name0.nameValue);

您正在
窗口
对象的全局范围内设置变量
名称
。在窗口对象中设置name的值时,其
get
方法将调用
toString
方法

(1) 将以字符串形式给出值
[object object]
,而不是
{first:“Vignesh”}

(2) 描述您正在访问字符串的未分配属性。i、 例如,
[object object]。第一个
,它变成了
未定义的


您必须在其他一些作用域中声明名称对象,如
if…else块
功能块
,以实现所需功能。

您正在
窗口
对象的全局作用域中设置变量
name
。在窗口对象中设置name的值时,其
get
方法将调用
toString
方法

(1) 将以字符串形式给出值
[object object]
,而不是
{first:“Vignesh”}

(2) 描述您正在访问字符串的未分配属性。i、 例如,
[object object]。第一个
,它变成了
未定义的


您必须在其他一些作用域中声明name对象,如
if…else block
函数块
,以实现所需功能。

您向他展示了如何在不同上下文中创建变量,但我认为问题更多的是它为什么不工作。@fingeron这就是为什么我的问题中有第一句解释它为什么不工作的原因。如果我用“let”替换“var”,一切都正常工作。为什么会这样?我知道“name”已经是一个属性了。@AmritanshuRai
let
是块范围的。你确实向他展示了如何在不同的上下文中创建变量,但我认为问题更多的是它为什么不工作。@fingeron这就是为什么我的问题中有第一句话解释它为什么不工作的原因。如果我替换“var”“让”一切都正常工作。为什么会这样?我知道“name”已经是一个属性了。@AmritanshuRai
let
是块范围的,当我用let替换var时,它也起作用。为什么会发生这种情况?@Amritanshu Rai,投票结果显示。当你使用var时,浏览器默认的全局作用域是window。但是当你使用let时,没有全局作用域,但你有一个空格块作用域。当我用let替换var时,它也起作用。为什么会发生这种情况?@Amritanshu Rai,投票结果显示。当您使用var时,浏览器默认全局作用域是window。但当您使用let时,没有全局作用域,但您有一个空格块作用域