Javascript 为什么这个打印没有定义?当我使用${name}以外的变量时,它可以工作

Javascript 为什么这个打印没有定义?当我使用${name}以外的变量时,它可以工作,javascript,variables,local-storage,undefined,Javascript,Variables,Local Storage,Undefined,在关键事件中访问全局变量时遇到问题。当我使用name时,它会打印未定义的,但如果我使用另一个variablename它会工作。有人知道为什么吗?下面的代码是用javascript编写的 var name = { "key": "value" } document.onkeyup = function (event) { console.log("name is", name["key"]) } 请尝试下面的代码。它起作用了 const name = { "key":

在关键事件中访问全局变量时遇到问题。当我使用
name
时,它会打印未定义的,但如果我使用另一个variablename它会工作。有人知道为什么吗?下面的代码是用javascript编写的

var name = {
    "key": "value"
}

document.onkeyup = function (event) {
    console.log("name is", name["key"])
}

请尝试下面的代码。它起作用了

const name = {
    "key": "value"
}

document.onkeyup = function (event) {
    console.log("name is", name.key)
}

您正在阴影化窗口对象上的name属性。您可以使用ES6语法(let或const),也可以使用其他变量名

全局窗口对象已经有一个
name
属性,该属性是当前窗口的名称。因此,当您使用
name
时,它返回类型为
string
的窗口名称。因此,当您执行
name[“key”]
操作时,它总是在
未定义的字符串中检查属性
key

您可以使用不同的变量名,也可以使用ES6
let
const
来声明变量

如前所述

var
声明的变量的范围是其当前执行上下文, 它是封闭函数,对于在任何函数外部声明的变量,它是全局变量。 如果重新声明JavaScript变量,它不会丢失其值

在本例中,
name
是全局变量,它指向已经存在的变量
window.name

而且根据,

window.name
将使用
toString
方法将所有值转换为其字符串表示形式

所以
名称
的值是
“[object object]”
,即
字符串
。你可以通过电话查一下

var name = {"key":"value"};
console.log(name); // [object Object]

字符串
值“[对象对象]”的属性未定义,这就是为什么您得到
未定义

请共享您尝试使用的语言,并共享您在javascript中尝试的代码。我想我附上了一张照片。就在那里now@abm,当您使用
var
声明变量
name
时,它与浏览器
window.name
属性冲突。使用
let
const