有人可以解释为什么这段代码会返回
在firebug控制台中""
?
不要低估,认为这只是一个错字!:O 我很想知道为什么它不会抛出错误 !!!
function mds() {
var {
namex,
score,
className
}
= {
namex: 'NAME',
score: '10',
className: 'Oop'
};
this.test = function () {
return name;
};
}
var x = new mds();
x.test()
我还希望了解有关此类变量映射(或链接)的更多详细信息?
更新:
我想知道为什么在控制台中使用"" 预定义名称?
答案 0 :(得分:2)
这里解释的JavaScript部分很简单。
执行此操作时:
this.test = function () {
return name;
};
它将首先在函数name
的范围内查找名为this.test()
的变量。如果在那里找不到name
,它也将检查父函数的范围。由于name
也没有定义,因此它将在全局范围内查找window
,并返回window.name
的值,在本例中为空字符串。当您在控制台(或Firebug)中运行window.name
时,您会看到此{name
)。这很简单。
window.name
的值是根据HTML标准中的定义决定的(不是根据ECMAScript规则)。 This MDN页面说:
window.name - 获取/设置窗口的名称。
在您的情况下,窗口的名称为空,因此您将获得空字符串。这是window.name
为空的原因的简单解释。
如果您真的想了解window.name
为什么在这里为空,您需要查看HTML Specification有关浏览上下文的内容。它表示window.name
的值将是当前浏览上下文的名称。
浏览上下文是将Document对象呈现给用户的环境。 (from the spec)
例如,当您使用以下代码在HTML中创建链接时,target
属性指定要在其中打开页面的目标浏览上下文。
<a href="page.html" target="TargetName">Click me</a>
请参阅此JSBin中的更多示例。
希望这有点帮助。阅读HTML规范以了解有关browsing contexts的更多信息。
答案 1 :(得分:1)
即使您运行以下代码,您也会得到&#34;&#34;。
function ha() {
return name;
}
ha();
返回&#34;&#34;与
无关var {
namex,
score,
className
}
= {
namex: 'NAME',
score: '10',
className: 'Oop'
};
测试它的另一种方法是,只需键入&#39; name&#39;按回车键进入。
&#34;&#34;
根据&#34; Krishna&#34;更新观察。
看起来名称是在控制台上下文中预定义的。因此,如果用户在范围内没有其他名称声明,则控制台将返回一个空字符串&#34;&#34;。如果用户声明了name =&#34; xyz&#34;然后返回xyz
答案 2 :(得分:1)
名称是合法的 窗口 属性。 Windows可以有名称。它们可能很有用。
如:
<a href="named.htm" target="namedWindow">Open a new window, with the name of namedWindow!</a>
...为了使这更加非正式,我们应该补充一点:带有命名目标的链接将在具有名称的现有窗口中打开或将如果不是,请创建一个具有给定名称的新名称。
因为“name”标记是窗口上下文的全局属性;说明:控制台中的 name 或脚本中的任何位置当然会返回一个空值(正确/接受的类型),即: string < / em>的。在这种情况下[意味着window.name尚未定义]空(“”)字符串是该属性的唯一正确值。
而窗口的未设置事件或任何DOM元素(如果存在)应该返回 null ,而不是 undefined 或者上帝禁止空字符串,因为它们(事件属性)期望功能;和函数是object类型,null表示一个空对象。
但是,html元素的未设置的内联事件属性应该返回一个空字符串(“”)。
答案 3 :(得分:0)
试试这个,
var {
namex: name,
score: score,
className
} = {
namex: 'NAME',
score: '10',
className: 'Oop'
};
实际上对象必须是键值对