如果還沒有初始化數組,是否有一種很好的方式來初始化一個數組? 目前的代碼看起來是這樣的:優雅的方式來初始化和擴展一個javascript數組
if (!obj) var obj = [];
obj.push({});
酷會是這樣的var obj = (obj || []).push({})
,但這並不:-(
如果還沒有初始化數組,是否有一種很好的方式來初始化一個數組? 目前的代碼看起來是這樣的:優雅的方式來初始化和擴展一個javascript數組
if (!obj) var obj = [];
obj.push({});
酷會是這樣的var obj = (obj || []).push({})
,但這並不:-(
var obj = (obj || []).push({})
工作,不工作,因爲該數組的新長度push
回報。一個新的對象,它會創建obj
與1值對於現有對象可能引發錯誤 - 如果obj
是一個數字,它沒有一個push
功能
你應該做的OK用:
var obj = obj || [];
obj.push({});
with(obj = obj || []) push({});
只是一個很小的調整你的想法,使其工作
var obj = (obj || []).concat([{}]);
儘管'concat'實際上會返回一個全新的數組......這意味着如果obj已經被定義了(我仍然好奇這是怎麼發生的),它不會在任何父範圍內添加'{}'...... – gnarf 2010-09-14 14:01:57
這是真的,但是原始信息中沒有範圍信息題。另外,由於他在嘗試中使用了賦值語句,所以突變顯然不是必需的。 – 2010-09-14 14:24:15
他的原始似乎是這樣說的:'obj'應該保持原樣,或者變成一個空的數組,然後''將東西推到它上面......問題是'push'不會發生在原始的'obj'上所以如果這個'obj'是對一個不同數組或者函數參數等的引用,那麼你的代碼就不會做同樣的事情...... – gnarf 2010-09-14 16:03:54
嗯......那是一個奇怪的位置對於'if(!obj)'之後的'var obj' ..,沒有多大意義,obj'是否也被定義在更高的範圍之內? – gnarf 2010-09-14 13:49:45
javascript不會在init裏面初始化一個額外的作用域if/else – sod 2010-09-14 14:09:08
我知道這一點,這就是爲什麼我想知道爲什麼你會有條件地定義一個'var'就像那樣......我假設'obj'可能是一個函數參數,而關鍵字'var'在那裏只是無用的/不需要的...如果沒有,在調用這個調用之前,沒有辦法定義'obj' ...嘗試'obj = {}; (函數(){if(!obj)var obj = []; console.log(obj);})();' - 你會得到'[]' – gnarf 2010-09-14 14:28:40