簡體   English   中英

名稱已在控制台中定義!

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM