[英]name already defined in console!?
任何人都可以解釋為什么此代碼返回
”
在螢火蟲控制台?
不要以為這只是錯字就投下反對票! :OI很想知道為什么它不會引發錯誤 !
function mds() {
var {
namex,
score,
className
}
= {
namex: 'NAME',
score: '10',
className: 'Oop'
};
this.test = function () {
return name;
};
}
var x = new mds();
x.test()
我也想聽聽有關這種類型的變量映射(或鏈接)的更多詳細信息?
更新:
我想知道為什么在控制台中使用名稱 “”預定義了名稱 ?
此處解釋的JavaScript部分很簡單。
執行此操作時:
this.test = function () {
return name;
};
首先將在函數this.test()
的范圍內查找名為name
的變量。 如果在此處找不到name
,它將同時簽入父函數的范圍。 而且由於還沒有在此處定義name
,它將在全局范圍( window
查找,並返回window.name
的值,在這種情況下,該值為空字符串。 這是在控制台(或Firebug)中運行name
時看到的( window.name
)。 這很簡單。
window.name
的值是根據HTML標准中的定義(而不是根據ECMAScript規則)確定的。 該 MDN頁面顯示:
window.name-獲取/設置窗口的名稱。
在您的情況下,窗口的名稱為空,因此您得到的是空字符串。 這就是為什么window.name
為空的更簡單的解釋。
如果您真的想了解為什么window.name
在此處為空,則需要查看HTML規范以了解有關瀏覽上下文的內容 。 它說window.name
的值將是當前瀏覽上下文的名稱。
瀏覽上下文是將文檔對象呈現給用戶的環境。 ( 根據規格 )
例如,當使用以下代碼創建HTML鏈接時, target
屬性指定要在其中打開頁面的目標瀏覽上下文。
<a href="page.html" target="TargetName">Click me</a>
請參閱此JSBin中的更多示例。
希望這會有所幫助。 閱讀HTML規范以了解有關瀏覽上下文的更多信息。
即使您運行下面的代碼,也會得到“”。
function ha() {
return name;
}
ha();
返回“”與方法無關
var {
namex,
score,
className
}
= {
namex: 'NAME',
score: '10',
className: 'Oop'
};
測試它的另一種方法是,只需在控制台中鍵入“名稱”並按Enter。
”
根據“克里希納”觀察進行更新。
看起來名稱是在控制台上下文中預定義的。 因此,如果用戶在范圍內沒有其他名稱聲明,則控制台將返回一個空字符串“”。 如果用戶聲明了name =“ xyz”,則返回xyz
名稱是合法的窗口屬性。 Windows可以具有名稱。 它們可能會有用。
如:
<a href="named.htm" target="namedWindow">Open a new window, with the name of namedWindow!</a>
...並使之更加非正式,我們應該添加一點:具有命名目標的鏈接將在具有該名稱的現有窗口中打開 ,或者將以給定名稱創建一個新窗口 (如果沒有)。
並且因為“名稱”標記是窗口上下文的全局屬性; 說明:控制台中或腳本中任何位置的名稱當然會返回一個空值(適當/可接受的類型 ),即:一個字符串 。 在這種情況下(意味着還沒有定義window.name)空字符串(“”)是該屬性的唯一正確值。
窗口或任何DOM元素(如果存在)的未設置事件應返回null ,而不是未定義的,或者上帝禁止使用空字符串,因為它們(事件屬性)需要函數; 和函數是object類型,null表示一個空對象。
但是,html元素的未設置的內聯事件屬性-應該返回一個空字符串(“”)。
嘗試這個,
var { namex: name, score: score, className } = { namex: 'NAME', score: '10', className: 'Oop' };
實際上,對象必須是鍵值對
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.