Rumah > Soal Jawab > teks badan
过去多啦不再A梦2017-07-05 10:55:08
Berdasarkan kod yang anda berikan, tidak perlu pra-tetapkan nilai kepada jenis rentetan dalam senario penggunaan semasa. Anda tidak boleh salah jika anda tidak menetapkannya.
Tetapi terdapat perbezaan penting antara tidak memberikan nilai dan memberikan rentetan kosong, iaitu jenis pembolehubah diubah.
Apabila tiada tugasan dibuat, ia adalah jenis yang tidak ditentukan, apabila nilainya nol, ia adalah jenis null, dan apabila nilainya ialah rentetan kosong "", ia adalah rentetan jenis.
Untuk berada di bahagian yang selamat, memandangkan hasil jangkaan pembolehubah ini ialah jenis rentetan, ini adalah cara selamat untuk menentukan jenisnya semasa mengisytiharkannya.
Bagaimana jika anda tidak menyatakannya? Itu kadangkala menimbulkan masalah.
Masalah berlaku terutamanya apabila anda menggunakan pembolehubah ini untuk menyambung data lain Ini mungkin mencetuskan penukaran jenis tersirat, dan anda akan dapat mencari perbezaannya.
Seperti berikut:
var a;
a+"a";
Jadi apa hasilnya? Bukan "a", tetapi "undefineda".
Jika a ditetapkan kepada null secara lalai, hasilnya ialah "nulla".
Dalam contoh anda, res ditetapkan secara langsung dan bukannya disambungkan dengannya, jadi tidak mengapa jika ia tidak diberikan kepada rentetan kosong, tetapi ia tidak disyorkan.
Contoh lain, sambung nombor dari 0-9, jika yang anda mahukan juga rentetan, seperti "0123456789":
var res;
for (var i = 0; i < 10; i++) {
res+=i;
}
console.log(res);
Bolehkah jika saya tidak mengisytiharkannya? Tidak, res akan ditukar kepada jenis nombor, tetapi tidak ditentukan ialah NaN selepas penukaran, dan hasil akhir yang anda peroleh juga ialah NaN.
Ia hanya betul jika res diberikan nilai "" rentetan kosong.
为情所困2017-07-05 10:55:08
Kes semasa tidak perlu dipratentukan sebagai rentetan kosong dan boleh dipadamkan untuk meningkatkan kebolehbacaan kod
Rentetan kosong biasanya digunakan dalam senario di mana operasi penghakiman bersyarat dilakukan pada rentetan atau operasi dilakukan pada dirinya sendiri:
Jenis pertama:
var a = '';
if (xxx) {
a = 'hello';
}
console.log('a'); //这时如果你不提前定义好a,如果条件不满足if,那么就不会执行,下面调用变量a的时候就会undefined
Jenis kedua:
var a = '';
a += 2; //这其实也要调用变量a,如果不提前定义,那么也是undefined
伊谢尔伦2017-07-05 10:55:08
js预解析时会对var关键字定义的变量进行预解析,都会赋值undefined。下面将其赋值为字符串,上面定义的时候也就将它预先初始化为一个空字符串。只声明var res;,不给它赋值也是可行的。
曾经蜡笔没有小新2017-07-05 10:55:08
Secara peribadi, saya rasa ini dilakukan secara tidak sengaja oleh penulis...
Jika anda berkeras untuk mentafsirnya, ini sama ada baik atau buruk. Perkara yang baik ialah anda boleh mengenali secara intuitif bahawa res ialah pembolehubah rentetan, yang meningkatkan kebolehbacaan perkara yang buruk ialah terdapat proses tambahan untuk penciptaan dan pelepasan objek, yang menyebabkan kehilangan prestasi, walaupun kerugian itu boleh diabaikan.