Assallamualaikum,
Apakabar kawan,
Kali ini saya mau share sesuatu ya gak begitu terlalu penting sih tapi ini benar2 bikin saya bingung -_- ketika proses development.
Apa itu ?
ok kita mulai aja ya,
Problem :
Ceritanya gini saya mau copy nilai variable ke variable lain untuk menjadi temporary / bakcup. Nah masalah bermula tapi sebelum kita masuk ke masalah tersebut kita lihat yang berikut.
Logika sederhana
var a = 5;
var b = a;
a = 7;
alert(a);
alert(b);
kira-kira berapa nilai a ? lalu berapa nilai b ?
coba disini https://jsfiddle.net/derryberni/zc4dfcn1/
nah benar jawabannya adalah a = 7 dan b = 5.
Lalu bagaimana ketika kita isi variable tersebut disi sebuah array dan mengubah nilainya ?
Contoh :
var a = [0,1,2];
var b = a;
a.splice(0, 1);
alert(a);
alert(b);
Nah berapakah isi dari variable a dan b ? Apa itu splice ?
ini kata w3school => splice adalah fungsi yang digunakan untuk menambah / mengurangi isi sebuah array
Ketika kita melihat contoh diatas sepintas isi dari variable a seharusnya adalah [1,2] dan variable b [0,1,2]
namun apa yang terjadi ?
silahkan dicoba di url berikut :
https://jsfiddle.net/derryberni/5vhgv048/
nah ternyata setelah dirun
variable a : [1,2]
variable b : [1,2]
kenapa ya ?
Berikut penjelasannya
Ketika kita mecopy sebuah nilai variable ke variable lainnya maka memang isinya tercopy ini berlaku bagi tipe data (integer, float dkk), nah ketika array diinisiasi ke sebuah variable kita mengenal istilah *copy by references yang sebenarnya dia tidak benar2 isinya tercopy namun kondisinya menjadi b references a yang mana b mereferensi isi dari a.
Solusinya ?
cukup menambahkan berikut
var a = [0,1,2];
var b = a.slice(0); //tambahkan slice(0)
a.splice(0, 1);
alert(a);
alert(b);
Berikut sample codenya :
https://jsfiddle.net/derryberni/f9e951q4/
Kesimpulannya adalah
Bukanlah bug hanya ketidaktahuan kita terhadap problem tersebut :)
Berikut referensi problem diatas ^_^
http://stackoverflow.com/questions/14170205/splice-is-affecting-previously-copied-variables
Semoga Bermanfaat.
Terimakasih :)
Apakabar kawan,
Kali ini saya mau share sesuatu ya gak begitu terlalu penting sih tapi ini benar2 bikin saya bingung -_- ketika proses development.
Apa itu ?
ok kita mulai aja ya,
Problem :
Ceritanya gini saya mau copy nilai variable ke variable lain untuk menjadi temporary / bakcup. Nah masalah bermula tapi sebelum kita masuk ke masalah tersebut kita lihat yang berikut.
Logika sederhana
var a = 5;
var b = a;
a = 7;
alert(a);
alert(b);
kira-kira berapa nilai a ? lalu berapa nilai b ?
coba disini https://jsfiddle.net/derryberni/zc4dfcn1/
nah benar jawabannya adalah a = 7 dan b = 5.
Lalu bagaimana ketika kita isi variable tersebut disi sebuah array dan mengubah nilainya ?
Contoh :
var a = [0,1,2];
var b = a;
a.splice(0, 1);
alert(a);
alert(b);
Nah berapakah isi dari variable a dan b ? Apa itu splice ?
ini kata w3school => splice adalah fungsi yang digunakan untuk menambah / mengurangi isi sebuah array
Ketika kita melihat contoh diatas sepintas isi dari variable a seharusnya adalah [1,2] dan variable b [0,1,2]
namun apa yang terjadi ?
silahkan dicoba di url berikut :
https://jsfiddle.net/derryberni/5vhgv048/
nah ternyata setelah dirun
variable a : [1,2]
variable b : [1,2]
kenapa ya ?
Berikut penjelasannya
Ketika kita mecopy sebuah nilai variable ke variable lainnya maka memang isinya tercopy ini berlaku bagi tipe data (integer, float dkk), nah ketika array diinisiasi ke sebuah variable kita mengenal istilah *copy by references yang sebenarnya dia tidak benar2 isinya tercopy namun kondisinya menjadi b references a yang mana b mereferensi isi dari a.
Solusinya ?
cukup menambahkan berikut
var a = [0,1,2];
var b = a.slice(0); //tambahkan slice(0)
a.splice(0, 1);
alert(a);
alert(b);
Berikut sample codenya :
https://jsfiddle.net/derryberni/f9e951q4/
Kesimpulannya adalah
Bukanlah bug hanya ketidaktahuan kita terhadap problem tersebut :)
Berikut referensi problem diatas ^_^
http://stackoverflow.com/questions/14170205/splice-is-affecting-previously-copied-variables
Semoga Bermanfaat.
Terimakasih :)