2014-05-18 51 views
-2

考慮下面的代碼:如何區分字符串對象的真實屬性和內容?

var str = new String("a"); 
str["prop"] = "b"; 
str[1] = "c"; 

for (var i in str) 
{ 
    if (str.hasOwnProperty(i)) 
     console.log(i + " = " + str[i]); 
} 

輸出將是:

1 = c 
0 = a 
prop = b 
a 

所以,我怎麼能確定「B」和「C」是「真實」的特性(即不是部分實際的字符串)而「a」是該字符串的一部分?

編輯:代碼是不完全的

+3

從哪裏你會得到'1 = c'? – Bergi

+0

只是獲得有序(從0)鍵的整數。 –

+1

對不起,我忘了廣告代碼 – WebStakker

回答

0

的「字符串的份」是不可寫的性能與數字名稱大於字符串的長度小。

for (var i in str) { 
    if (!Object.prototype.hasOwnProperty.call(str, i)) continue; 
    if (/0|[1-9]\d+/.test(i) && +i<str.length) continue; 
    // or String(i>>>0)===i && … 

    console.log(i + " = " + JSON.stringify(str[i])); 
} 

// Output: 
1 = "c" 
prop = "b" 
+0

這似乎是檢查它的正確方法。很酷,謝謝! – WebStakker

相關問題