我正在嘗試解決JavaScript對象的屬性名稱有效的問題。例如有效的JavaScript對象屬性名稱
var b = {}
b['-^colour'] = "blue"; // Works fine in Firefox, Chrome, Safari
b['colour'] = "green"; // Ditto
alert(b['-^colour']); // Ditto
alert(b.colour); // Ditto
for(prop in b) alert(prop); // Ditto
//alert(b.-^colour); // Fails (expected)
這post細節有效的javascript變量名,和「 - ^彩」顯然是無效的(作爲變量名)。這同樣適用於對象屬性名稱嗎?綜觀上述,我試圖找出是否
B [「 - ^色」]是無效的,但怪癖在所有瀏覽器的工作原理,我不應該相信它的工作向前發展
b [「 - ^色」]是完全有效的,但它只是那種只能以這種方式訪問的形式 - (它支持這樣的對象可以被用作也許映射?)
東西否則
順便說一句,在JavaScript中的全局變量可以在頂級聲明爲
var abc = 0;
,但也可以創建(據我所知)與
window['abc'] = 0;
在以下所有作品上述瀏覽器
window['@£$%'] = "bling!";
alert(window['@£$%']);
這個有效嗎?這似乎與變量命名規則相矛盾 - 或者我沒有在那裏聲明一個變量?變量和對象屬性名稱有什麼區別?
「的對象屬性名稱可以是任何有效的JavaScript串,或任何可以被轉換成一個字符串,包括空字符串。然而,任何屬性名不是一個有效的JavaScript標識符(例如,一個包含空格或連字符的屬性名稱或以數字開頭的屬性名稱)只能使用方括號表示法進行訪問。「 ([MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Objects_and_properties)) – 2014-02-10 13:51:08
***Márton提出了一個非常重要的觀點***當初,可能看起來好像任何JS對象都可以將任何東西視爲有效的對象鍵,但事實並非如此--Márton正確地指出這些屬性鍵實際上已轉換爲字符串。考慮'var x = new function X(){};','var y = new function Y(){};'和obj = {x:true};''obj [y]'會輸出'true',因爲'x'和'y'在用作對象鍵時都被轉換爲相同的字符串'「[object Object]」 – ChaseMoskal 2014-04-01 20:44:58
爲了清楚起見,根據我以前的評論的例子,'obj [ x] === obj [y] === obj [「[object Object]」]' – ChaseMoskal 2014-04-01 20:47:00