javascript中對象使用push

var obj = {
    '1':'a',
    '2':'b',    
    'length':'2',
    push:Array.prototype.push
 };
 obj.push('c');

瀏覽器執(zhí)行以上腳本后,obj 的 length 屬性會變?yōu)?3;obj[2] 的值是 c;obj[3] 的值是 undefined;

push 方法把值添加到數(shù)組中。

push 方法有意具有通用性。該方法和 call() 或 apply() 一起使用時,可應(yīng)用在類似數(shù)組的對象上。push 方法根據(jù) length 屬性來決定從哪里開始插入給定的值。如果 length 不能被轉(zhuǎn)成一個數(shù)值,則插入的元素索引為 0,包括 length 不存在時(上面代碼去掉“'length':'2',”時,obj的length屬性會被創(chuàng)建并被賦值為1,obj[0]為push進(jìn)去的c,r若再obj.push('g');則length為2,obj[0]=‘c’,obj[1]='g',obj[2]='b',obj[3]='undefined',再push一個,則obj[2]的值會被覆蓋,obj[3]='undefined',)。當(dāng) length 不存在時,將會創(chuàng)建它。

唯一的原生類數(shù)組(array-like)對象是 Strings,盡管如此,它們并不適用該方法,因?yàn)樽址遣豢筛淖兊摹?br> 當(dāng)調(diào)用該方法時,新的 length 屬性值將被返回。

所以說,push會根據(jù)對象length屬性的值去確定插入的位置,即this[i+n] = %_Arguments(i)。
所以在原題中obj.length值為2,調(diào)用obj.push("c")時,會發(fā)生obj[2]="c"的情況,所以最后 obj[2]就變成了'c',而不是原來的'b'。
當(dāng)然了,push方法最后會根據(jù)傳入的參數(shù)個數(shù)多少,即arguments.length來返回new_length,并賦值給obj.length

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容