Beberapa tingkah laku aneh petua JavaScript arrays_javascript

WBOY
Lepaskan: 2016-05-16 15:18:30
asal
1309 orang telah melayarinya

Kepentingan tatasusunan dalam bahasa pengaturcaraan terbukti dengan sendirinya. Tatasusunan dalam JavaScript juga merupakan salah satu objek yang paling biasa digunakan . Tidak seperti tatasusunan dalam bahasa peringkat tinggi yang ditaip kuat seperti Java, yang hanya boleh menyimpan unsur jenis yang sama atau subjenisnya, JavaScript boleh menyimpan pelbagai jenis elemen dalam tatasusunan yang sama, dan panjangnya juga boleh dilaraskan secara dinamik, apabila data bertambah atau Kurangkan perubahan automatik kepada panjang tatasusunan.

Hari ini, saya menyemak tatasusunan JavaScript, dan kemudian meringkaskan beberapa tingkah laku peliknya, saya akan berkongsi dengan anda di sini.

Pelik 1: Fungsi pembina Array() boleh dipanggil tanpa menggunakan kata kunci baharu:

Pembina Array() menggunakan parameter yang dihantar kepadanya sebagai elemen tatasusunan untuk mencipta tatasusunan Secara amnya, kami memanggilnya seperti berikut:

var a = new Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
Salin selepas log masuk

Walau bagaimanapun, adalah mungkin juga untuk meninggalkan yang baharu, seperti berikut:

var a = Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
Salin selepas log masuk

Walaupun saya tidak tahu apakah mekanisme pelaksanaan dalamannya, saya rasa fungsi pembinanya boleh ditakrifkan seperti berikut:

function Array(args) {
//如果,this不是Array的实例的话,
//说明不是通过new调用的,则在这里再重新调用
if( !this instanceof Array) {
return new Array(args);
}//后面是正常调用时的实现代码<br />//...<br />} 
Salin selepas log masuk

Pelik 2: Apabila hanya satu parameter dihantar kepada pembina, tingkah laku tidak dapat diramalkan

Jika hanya satu parameter diluluskan, dan parameter ini ialah integer, tatasusunan akan diperoleh dan panjangnya adalah sama dengan parameter ini

var a = new Array(12);
console.log(a.length); //12
console.log(a); //[] 
Salin selepas log masuk

Jika anda hanya melepasi nombor titik terapung, ralat akan dilaporkan:

var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…) 
Salin selepas log masuk

Melalui rentetan akan berfungsi dengan baik, dengan rentetan sebagai elemen pertama tatasusunan:

var a = new Array("1.1");
console.log(a.length); //
console.log(a); //["1.1"] 
Salin selepas log masuk

Tetapi untuk mengelakkan kekaburan, saya cadangkan yang terbaik adalah untuk mencipta tatasusunan secara langsung dalam bentuk literal:

var a = []; //空数组
var a = [1, 1, "bom"]; //三个元素
var a = [12]; //一个元素,并且元素是12 
Salin selepas log masuk

Pelik 3: Atribut panjang tatasusunan boleh diubah suai (boleh ditulis)

Seperti berikut, kami terus menukar panjang daripada 2 kepada 100, dan pengubahsuaian itu berjaya! ! !

var a = [1, 2, 3, 4];
console.log(a.length); //4
a.length = 100; 
console.log(a.length); //100 
Salin selepas log masuk

Walaupun panjang bersamaan dengan 100, unsur a[4]-a[99] tidak wujud dan jika anda meminta nilainya, sebagai contoh, lakukannya dalam gelung dari 0 hingga a.panjang, maka akan menjadi tidak ditentukan .

Tonton seterusnya:

var a = [1, 2, 3, 4];
a.length = 100;
console.log(a[10]); //undefined
console.log(99 in a); //false 
Salin selepas log masuk

Agak serupa dengan contoh di bawah:

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100 
Salin selepas log masuk

Perbezaannya ialah a[99] di sini wujud kerana kami menciptanya, walaupun ia mempunyai nilai yang tidak ditentukan. Tetapi semua elemen daripada a[4] hingga a[98] tidak wujud, seperti berikut:

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(99 in a); //true;
console.log(98 in a); //false
console.log(a.length); //100 
Salin selepas log masuk

Perkara di atas telah berkongsi dengan anda beberapa kelakuan aneh tatasusunan JavaScript Harap maafkan saya jika artikel itu tidak ditulis dengan baik, terima kasih!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan