Panggil terus kaedah pada prototaip Nombor, seperti berikut:
10.toString();
akan melaporkan ralat:Uncaught SyntaxError: Invalid or unexpected token
Namun, tiada ralat jika anda memanggil nombor floating point secara terus
10.1.toString();//"10.1"
Saya melihat penjelasan ini:
Kaedah panggilan literal nombor secara langsung Selagi enjin JavaScript tidak mengelirukan titik perpuluhan dengan pengendali titik objek, pelbagai kaedah penulisan boleh digunakan untuk memahami titik pertama sebagai titik perpuluhan (iaitu 10.0), fahami titik kedua sebagai memanggil sifat objek, untuk mendapatkan hasil yang betul.
Sebagai contoh, kaedah panggilan berikut adalah betul
(10).toString(2)
10..toString(2) // "1010"
10 .toString(2) // "1010"
10.0.toString(2) // "1010"
10['toString'](2) // "1010"
Tetapi saya tidak faham cara ia berfungsi.
Pada mulanya saya rasa ia adalah kerana keutamaan kurungan atau pengendali titik Adakah saya menukar 10 kepada nombor dahulu?
Tetapi saya rasa ini tidak boleh dijelaskan.
Sila beritahu saya mengapa ralat berlaku apabila memanggil kaedah prototaip terus pada integer, tetapi bukan pada nombor titik terapung?
Mengapa kaedah prototaip integer boleh dipanggil melalui kaedah yang disenaraikan di atas?
Pendapat saya: Selagi maksud titik itu tidak jelas, penyusun boleh memahaminya dengan betul.
(10).toString(2) // "1010"
Jelas sekali, kurungan ditambah dan berikut. ialah
operator titik
.
是点运算符
10..toString(2) // "1010"
不存在带两个小数点的数字,因此这里也是指
点运算符
所以这个 10..toString(2) 其实可以归结为下面一个
10.0.toString(2) // "1010"
浮点数后面的点一定不再是指小数点了,而是指
10..toString(2) // "1010"点运算符
Jadi 10..toString(2) ini sebenarnya boleh dipecahkan kepada yang berikut
10.0.toString(2) // "1010"
Titik selepas nombor titik terapung mestilah tidak lagi merujuk kepada titik perpuluhan, tetapi kepada
🎜10['toString'](2) // "1010"🎜 🎜obj[key] Dengan cara ini anda boleh mencari atribut bernama kunci dalam obj. 🎜 🎜🎜🎜🎜🎜 🎜10.toString() Sebab ralat🎜 🎜Sebabnya ialah pengkompil akan mempunyai dua tafsiran apabila melihat ini: 🎜operator titik
Prinsip kompilasi, apabila enjin mula menghuraikan nombor,
.
adalah sah, jadi ia akan diberi keutamaan sebagai titik perpuluhan. Penyelesaian di atas semuanya memberitahu penghurai "selesai membaca nombor" dan mula membaca token seterusnya.