Saya perlu javascript untuk menambahkan 5 ke variabel integer, tetapi ia memperlakukan variabel sebagai string, jadi ia menulis variabel tersebut, lalu menambahkan 5 di akhir "string". Bagaimana saya bisa memaksanya untuk melakukan matematika?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Keluaran: 55
Bagaimana saya bisa memaksanya menjadi keluaran 10
?
javascript
string
math
addition
Sean
sumber
sumber
#control
membuat perbedaan pada masalah Anda? Jika tidak, hapus saja dan jangan tunjukkan kepada kami. Terus kurangi kode Anda sampai Anda memiliki kasus uji minimum absolut yang diperlukan untuk mereproduksi masalah Anda. Sering kali melakukannya akan menyebabkan Anda menemukan masalah dan belajar dalam prosesnya. Jika Anda tidak menyelesaikannya sendiri, kemungkinan besar Anda akan mendapatkan bantuan cepat dengan contoh sederhana Anda.Jawaban:
Anda memiliki garis
di file Anda, ini akan menetapkan titik menjadi string karena konten txt tidak dibatasi ke angka.
untuk mengubahnya menjadi int, ubah baris menjadi:
Catatan: Di
10
sini menentukan desimal (basis-10). Tanpa ini beberapa browser mungkin tidak menafsirkan string dengan benar. Lihat MDN:parseInt
.sumber
yang paling sederhana:
titik-titik tersebut akan diubah menjadi angka.
sumber
dots = +dots+5
.JANGAN LUPA - Gunakan
parseFloat();
jika Anda berurusan dengan desimal.sumber
Number
.Saya menambahkan jawaban ini karena saya tidak melihatnya di sini.
Salah satu caranya adalah dengan meletakkan karakter '+' di depan nilai
contoh:
x === 15
Saya telah menemukan ini sebagai cara yang paling sederhana
Dalam hal ini, baris:
bisa diubah menjadi
untuk memaksanya menjadi angka
CATATAN:
sumber
parseInt()
harus melakukan triknyaMemberi anda
http://www.w3schools.com/jsref/jsref_parseint.asp
Catatan:
10
inparseInt(number, 10)
menentukan desimal (basis-10). Tanpa ini beberapa browser mungkin tidak menafsirkan string dengan benar. Lihat MDN:parseInt
.sumber
Ini juga berfungsi untuk Anda:
sumber
itu sangat sederhana saja
ini memaksa javascript untuk berkembang biak karena tidak ada kebingungan untuk * masuk javascript.
sumber
Anda dapat menambahkan + di belakang variabel dan itu akan memaksanya menjadi integer
sumber
Setelah mencoba sebagian besar jawaban di sini tanpa hasil untuk kasus khusus saya, saya menemukan ini:
Tanda + adalah yang membingungkan js, dan ini menghilangkannya sama sekali. Mudah diterapkan, jika berpotensi membingungkan untuk dipahami.
sumber
DIPERBARUI sejak ini terakhir kali mendapat suara negatif ....
Saya hanya melihat porsinya
sebelumnya, tetapi kemudian ditunjukkan kepada saya bahwa
txt
kotak itu memberi makan variabeldots
. Karena itu, Anda harus yakin untuk "membersihkan" masukan, untuk memastikan itu hanya memiliki bilangan bulat, dan bukan kode berbahaya.Salah satu cara mudah untuk melakukannya adalah dengan mengurai kotak teks dengan
onkeyup()
peristiwa untuk memastikannya memiliki karakter numerik:dimana acara tersebut akan memberikan kesalahan dan menghapus karakter terakhir jika nilainya bukan angka:
Jelas Anda bisa melakukannya dengan regex juga, tapi saya mengambil jalan keluarnya dengan malas.
Sejak saat itu Anda akan tahu bahwa hanya angka yang bisa ada di dalam kotak, Anda seharusnya bisa menggunakan
eval()
:sumber
eval()
berbahaya jikadots
berasal dari masukan pengguna, terutama jika dari masukan yang disimpan. Informasi lebih lanjutdots
adalah variabel yang ditentukan yang sedang bertambah dan hanya disalahartikan sebagai string. Jadi saya akan mengkualifikasikan jawaban saya bahwa itu tidak boleh digunakan dengan mudah, seperti yang Anda katakan, dari input pengguna / tersimpan yang dapat berpotensi untuk injeksi skrip jahat. Tetapi juga dalam kasus ini, injeksi semacam itu akan menyebabkan kesalahan / pengecualian matematika, jadi itu benar-benar tidak akan melakukan apa pun.eval()
sangat berbahaya, Anda perlu melihat kode dalam konteks yang digunakan OP. Ini bukan, dalam kasus ini, karena dia menggunakan input yang tidak berasal dari kotak teks atau bentuk input pengguna lainnya di mana mungkin ada bentuk injeksi apa pun dari nilai non-numerik! Saya berharap saya bisa menurunkan suara negatif Anda!eval()
baik-baik saja, dan Anda perlu melihat konteks yang digunakannya, alih-alih hanya mempercayai semua yang Anda baca tanpa benar-benar memahaminya!var dots = 5 function increase(){ dots = dots+5; }
tidak menggunakan bidang teks, dan menetapkan menggunakan variabel langsung, bukan dari input pengguna. Jadi itulah yang saya lakukan. Tapi saya melihat Anda benar bahwa dia menetapkan bidang teks itutxt
kedots
, dandots
merupakan variabel global, dan karenanya diperbarui oleh masukan itu. Kamu benar. Terima kasih.