Tampaknya ketika saya menggunakan tipe numerik sebagai nama kunci dalam sebuah objek, itu selalu diubah menjadi string. Apakah ada cara untuk menyimpannya dalam bentuk numerik? Typecasting normal sepertinya tidak berfungsi.
Contoh:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Keluaran Dir:
{
'1': 'a value'
}
Yang saya inginkan adalah ini:
{
1: 'a value'
}
Nasihat?
Jawaban:
Tidak, ini tidak mungkin. Kuncinya akan selalu diubah menjadi string. Lihat dokumen Pengakses Properti
> var foo = {} undefined > foo[23213] = 'swag' 'swag' > foo { '23213': 'swag' } > typeof(Object.keys(foo)[0]) 'string'
sumber
length
properti array .myArray["1"] = foo
, tampaknya menyetel properti, padahal sebenarnya menyetel elemen array, tetapi hanya karena "1" adalah representasi string dari bilangan bulat, yang merupakan omong kosong linguistik lengkap - tapi itu Javascript.myArray["1"] = foo
tidak hanya tampak seperti menyetel properti, itu sebenarnya menyetel properti (dengan kunci "1") dalam setiap arti dari definisi properti. Misalnya,myArray.hasOwnProperty("1")
hasiltrue
. Secara semantik, properti ini juga dapat dianggap sebagai "elemen" karena memiliki kunci numerik, tetapi tidak ada lagi yang membedakan "elemen" array dari properti array. Baca spesifikasinya. Jika Anda masih tidak setuju, kutip sumber Anda.Dalam suatu objek, tidak, tetapi saya telah menemukan Peta sangat berguna untuk aplikasi ini. Di sinilah saya telah menggunakannya untuk kunci numerik, acara berbasis kunci.
onKeydown(e) { const { toggleSidebar, next, previous } = this.props; const keyMapping = new Map([ [ 83, toggleSidebar ], // user presses the s button [ 37, next ], // user presses the right arrow [ 39, previous ] // user presses the left arrow ]); if (keyMapping.has(e.which)) { e.preventDefault(); keyMapping.get(e.which)(); } }
sumber
Muncul dengan desain di ECMA-262-5:
Namun, saya tidak melihat spesifikasi pasti untuk itu di ECMA-262-3. Terlepas dari itu, saya tidak akan mencoba menggunakan non-string sebagai nama properti.
sumber
Apakah kita membutuhkan sesuatu seperti ini?
var userId = 1;var myObject ={}; console.log( typeof userId ); // number myObject[userId] = 'a value'; console.dir(myObject);
Konsol: Objek
1: "nilai"
sumber
Saya pikir Anda dapat melakukan hal berikut jika Anda ingin menggunakan hal di atas untuk mengaksesnya seperti nomor, saya melakukan hal yang sama dan berhasil.
var myObj = {"0":"a","1":"b","CNT":2}; $.each(myObj,function(key,value){ if(isNaN(parseInt(key))){ return true; //continue; } //Code to perform operation }
Ini hanya berfungsi jika kunci tidak dimulai dengan dan karakter numerik jika tidak maka akan diubah menjadi angka. Lihat contoh berikut:
parseInt("45kjghk") === 45
Saya menggunakan jQuery di sini
Diperbarui:
var myObj = {"0":"a","1":"b","CNT":2}; $.each(myObj,function(key,value){ if(isNaN(parseInt(key)) || (key.length !== parseInt(key).toString().length) ){ return true; //continue; } //Code to perform operation }
Ini dapat mengatasi masalah di atas. Tolong sarankan lebih baik jika tersedia dan masalah dengan jawaban ini jika ada.
sumber
Dalam JavaScript, string numerik dan angka dapat dipertukarkan, jadi
myObject[1] == myObject['1']
Jika Anda benar-benar ingin angka menjadi kunci untuk suatu objek, Anda mungkin menginginkan sebuah array (yaitu dibuat dengan
new Array()
atau[]
).sumber
Object.prototype.toString.call(someObject)
Masalahnya adalah Anda tidak dapat menggunakan Angka sebagai kunci.