为什么引用未声明的变量“名称”在JSFiddle中返回“结果”?

问题描述 投票:1回答:2

jsfiddle

在下面,从未声明变量名称。该值作为字符串“结果”返回。这不是错误的吗,应该不是“未定义”吗?


let obj = {
name: name,
age: "23"
}

alert(obj.name);

obj = {
name,
age: "23"
}

alert(obj.name);
javascript object web jsfiddle
2个回答
4
投票

这是因为JSFiddle手动将以下脚本注入every iframe:

// tell the embed parent frame the height of the content
if (window.parent && window.parent.parent){
  window.parent.parent.postMessage(["resultsFrame", {
    height: document.body.getBoundingClientRect().height,
    slug: "n4j20xkh"
  }], "*")
}

// always overwrite window.name, in case users try to set it manually
window.name = "result"

您可以通过检查结果iframe并查看正文底部的<script>标签来查看。因此,即使您的代码从未创建过name变量,它也已经存在于全局范围内。

enter image description here

请注意,window.name will always exist,作为字符串,与站点无关,即使该站点未分配给它。

(通常,引用未初始化的变量将导致ReferenceError-not undefined-但由于存在window.name,因此不会引发错误。]


4
投票

您只是将window.name(在全局范围内定义的name)设置为obj.name

let obj = {
name: name,
age: "23"
}

console.log(window.name);
console.log(obj.name);
© www.soinside.com 2019 - 2024. All rights reserved.