2013-08-23 20 views
0

有沒有什麼原因讓我不應該使用函數引用作爲對象的屬性/鍵?此代碼在Chrome,火狐,& IE8,但「只是因爲一些工作......」使用函數引用作爲對象屬性/鍵是安全的

var x = {} 

var a = function() { return 'a' }; 
var b = function() { return 'b' }; 

x[a] = 1 
x[b] = 2 

x[a] === x[a] // returns true 
x[a] === x[b] // returns false 
x[b] === x[b] // returns true 
x[a] // returns 1 
x[b] // returns 2 
+0

具有相同主體的兩個不同函數將序列化爲相同的字符串。這可能不希望。 –

+0

哦,僅供參考,ECMAScript 6將介紹適當的地圖:http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets。任何值/對象都可以成爲一個關鍵。 –

回答

5

對象鍵字符串。實際上,x[a]中使用的是x[a.toString()]

這意味着你的關鍵功能是完全一樣的密鑰字符串:

x[a] === x["function() { return 'a' }"] 

所以,是的,你可能會認爲這兩個不安全和不合理的。很難想象它會有用或有效的背景。

+0

看到這就是我的想法,關鍵是字符串,但Chrome的調試器扔掉了我,因爲它沒有顯示關鍵的引號。 'var x = {'1':'a'}; x;'打印出'Object {1:「a」}'。 –

相關問題