English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Questo esempio spiega l'uso del metodo push nell'array JavaScript. Condivido questo con tutti voi per riferimento, come segue:
Guarda il codice seguente:
var o = { 1:'a' ,2:'b' ,length:2 ,push:Array.prototype.push ; o.push('c');
Q: Qual è l'aspetto attuale del valore interno?
La mia prima reazione è stata di respingere, perché studiare il comportamento dell'interprete in casi irragionevoli? Ma a volte queste deduzioni sono molto affascinanti, quindi sono tornato a rifletterci attentamente e ho scoperto che è molto semplice.
Per il metodo push, la mia prima reazione è stata di respingere, perché studiare il comportamento dell'interprete in casi irragionevoli? Ma a volte queste deduzioni sono molto affascinanti, quindi sono tornato a rifletterci attentamente e ho scoperto che è molto semplice.
{ 1:'a' ,2:'c' ,length:3 //operazione push=>length+1 ,push:Array.prototype.push }
Riepilogo:
In JavaScript, tutto è un oggetto, e gli oggetti JavaScript hanno alcune differenze rispetto agli oggetti fortemente tipizzati, che possono essere intesi come una raccolta di insiemi di coppie chiave-valore. Anche il tipo array non fa eccezione, l'accesso alle sue posizioni è un accesso alle chiavi (tuttavia le sue chiavi sono numeri naturali), nell'esempio sopra, l'oggetto letterale assegnato a a simula un array (un array con un'indice che parte da 1) - ovviamente solo alcune delle proprietà di un array reale, come il fatto che un array reale esegue controlli di sovraccarico in base a length.
Sapendo che la posizione di push è basata su length, è facile capire i vari fenomeni apparentemente strani:
//1.length non esiste, l'engine lo imposta a 0 var o = { '1':'a' '2':'b' ,push:Array.prototype.push ; o.push('c');//c {0:'c',1:'a',2:'b',...} //2.length è un valore negativo, è un problema interessante che coinvolge il codice originario, il codice complementare e il complemento a due【1】 var o = { '1':'a' '2':'b' ,length:-1 ,push:Array.prototype.push ; o.push('c');//c {1:'a',2:'b',4294967295:'c',length:4294967296,...} //3.length è una stringa o un oggetto var o = { 1:'a' ,2:'b' ,length:'A' ,push:Array.prototype.push ; o.push('c');//c {0:'c',1:'a',2:'b',length:1,...} pensavo che l'interprete JavaScript avrebbe convertito A in un codice ASCII per assegnare a length, finalmente ho visto che JavaScript ha ancora una moralità
I numeri sono memorizzati in modo di complemento a due in un computer, per facilitare le operazioni, il complemento a due di -1 è uguale al complemento a due di 4294967295, in base al significato di length, qui è un numero unsigned
Complemento a 1 = 1111 1111 1111 1111 1111 1111 1111 1111 = [4294967295] complemento a 1 = 1111 1111 1111 1111 1111 1111 1111 1111
Quindi inseriamo un oggetto in push di 2 con key 4294967296, ma la lunghezza massima dell'array è limitata a 4294967296, il che significa che l'indice può essere solo 4294967295, raggiungendo solo 32 bit - per 4294967296 = 1 0000 0000 0000 0000 0000 0000 0000 0000, prelevando gli ultimi 32 bit diventa 0, quindi la posizione in cui viene eseguito push è 0.
Chi è interessato a ulteriori contenuti su JavaScript può consultare le sezioni speciali di questo sito: 'Riassunto delle tecniche di manipolazione degli array JavaScript', 'Riassunto delle tecniche di esplorazione degli algoritmi JavaScript', 'Riassunto delle tecniche di calcolo matematico JavaScript', 'Riassunto delle tecniche di strutture dati e algoritmi JavaScript', 'Riassunto delle tecniche di animazione JavaScript', 'Riassunto delle tecniche di ricerca JavaScript', 'Riassunto delle tecniche di debug degli errori JavaScript'.
Spero che il contenuto di questo articolo possa essere utile per la progettazione di programmi JavaScript di tutti.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore è proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (sostituisci # con @ durante l'invio dell'e-mail) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.