Kata Pengantar: Jenis data JavaScript dibahagikan kepada dua kategori: jenis primitif dan jenis objek. 5 jenis primitif: nombor, rentetan, nilai Boolean, null (kosong), undefined (undefined). Objek ialah koleksi atribut dan setiap atribut terdiri daripada "pasangan nama/nilai" (nilai boleh menjadi nilai primitif atau objek). Tiga objek khas: objek global, tatasusunan dan fungsi. Teras bahasa JavaScript juga mentakrifkan tiga kelas berguna: kelas tarikh (Tarikh), kelas biasa (RegExp) dan kelas ralat (Ralat).
1 Nombor
JavaScript tidak membezakan antara nilai integer dan nilai titik terapung. JavaScript boleh mengenali literal integer perpuluhan (yang dipanggil literal ialah nilai data yang digunakan secara langsung dalam atur cara), dan nilai heksadesimal (diawali dengan 0x atau 0X, iaitu nombor 0 dan bukan huruf o. Fikirkan tentangnya jika ia adalah huruf o Jika ya, maka nilai heksadesimal menjadi pengecam.) Walaupun piawaian ECMAScript tidak menyokong literal perlapanan, sesetengah pelaksanaan JavaScript boleh menggunakan bentuk perlapanan untuk mewakili integer (diawali dengan nombor 0 Pengarang menggunakan perlapanan untuk mewakili integer dalam tiga penyemak imbas IE, Chrome dan FF pada my komputer juga tidak menjadi masalah. Walau bagaimanapun, dalam mod ketat ECMAScript6, literal oktal dilarang secara jelas.
Terdapat dua cara untuk menulis literal titik terapung. ① Cara tradisional menulis nombor nyata: Ia terdiri daripada bahagian integer, titik perpuluhan dan bahagian perpuluhan ② Kaedah pengiraan eksponen: iaitu nombor nyata diikuti dengan huruf e atau E, diikuti dengan tanda positif atau negatif; , dan kemudian diikuti dengan eksponen integer.
1.1 Limpahan operasi aritmetik
Operasi aritmetik dalam JavaScript tidak akan melaporkan ralat apabila melimpah, terkurang atau boleh dibahagikan dengan 0.
Limpahan: Apabila hasil operasi melebihi had atas nombor yang boleh diwakili oleh JavaScript, hasilnya ialah infiniti positif atau infiniti negatif-Infiniti. Ciri-ciri tingkah laku nilai infiniti juga konsisten dengan realiti: hasil operasi tambah, tolak, darab dan bahagi berdasarkannya masih merupakan nilai tak terhingga (tentunya mengekalkan tanda-tandanya: apabila hasil operasi adalah tak terhingga); menghampiri sifar dan lebih kecil daripada nilai terkecil yang JavaScript boleh mewakili Perkara yang berlaku semasa nilai itu masih kecil. Dalam kes ini, 0 akan dikembalikan. Nilai khas "sifar negatif" dikembalikan apabila nombor negatif mengalir bawah. Sifar negatif dan sifar keseluruhan pada asasnya adalah sama (malah boleh diuji menggunakan kesamaan ketat ===), kecuali sebagai pembahagi:
var zero = 0; //正零值 var negz = -0; //负零值 zero === negz //表达式返回值为true 1/zero === 1/negz //表达式返回值false,等价于判断正无穷大和负无穷大是否严格相等
Kebolehbahagi dengan 0 akan mengembalikan infiniti positif atau infiniti negatif. Tetapi membahagikan 0 dengan 0 akan mengembalikan NaN (nilai sifat NaN bagi Nombor objek pratakrif JavaScript). Terdapat empat situasi di mana NaN dikembalikan: ① 0 dibahagikan dengan 0 ② infiniti dibahagikan dengan infiniti ③ melakukan operasi punca kuasa dua pada sebarang nombor negatif ④ apabila operator aritmetik digunakan dengan operan yang bukan nombor atau tidak boleh ditukar kepada nombor.
Terdapat sesuatu yang istimewa tentang nilai NaN: ia tidak sama dengan mana-mana nilai, termasuk nilainya sendiri. Terdapat dua cara untuk menilai sama ada pembolehubah x ialah NaN: ① Gunakan fungsi isNaN() ② Gunakan x != x untuk menilai Hasil ungkapan adalah benar jika dan hanya jika x ialah NaN. Terdapat fungsi serupa isFinite() dalam JavaScript, yang mengembalikan benar apabila parameternya bukan NaN, Infinity atau -Infinity.
1.2 Nombor titik terapung binari dan ralat pembundaran
Terdapat banyak nombor nyata, tetapi JavaScript hanya boleh mewakili bilangan terhad daripadanya dalam bentuk nombor titik terapung. Dalam erti kata lain, apabila menggunakan nombor nyata dalam JavaScript, ia selalunya hanya perwakilan anggaran nilai sebenar. JavaScript menggunakan perwakilan nombor titik terapung IEEE-754, yang merupakan perwakilan binari yang boleh mewakili pecahan dengan tepat seperti 1/2, 1/8, dan 1/1024, tetapi pecahan perpuluhan 1/10, 1/10 dsb. tidak boleh dinyatakan dengan tepat. Contohnya:
var x = 0.3 -0.2; //x=0.09999999999999998 var y = 0.2 - 0.1; // y=0.1 x == y //false x == 0.1 //false y == 0.1 //true 0.1 == 0.1 //true var z = x + y; //z=0.19999999999999998
2 文本
2.1 字符串、字符集
字符串(string)是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。字符串的长度(length)是其所含16位值得个数。JavaScript通过字符串类型来表示文本。注意:JavaScript中并没有表示单个字符的“字符型”。要表示一个16位值,只需将其赋值给字符串变量即可。
JavaScript采用UTF-16编码的Unicode字符集,JavaScript字符串是由一组无符号的16位值组成的序列。那些不能表示为16位的Unicode字符则遵循UTF-16编码规则——用两个16位值组成一个序列(或称作“代理项对”)表示。这意味着一个长度为2的JavaScript字符串有可能表示一个Unicode字符。注意:JavaScript定义的各式字符串的操作方法均作用于16位值,而非字符,且不会对代理项对做单独处理。书看到这里,又结合http://www.alloyteam.com/2013/12/js-calculate-the-number-of-bytes-occupied-by-a-string/上面所述,终于对Unicode字符集、UTF-8、UTF-16稍有理解。
字符串的定界符可以是单引号或者双引号。这两种形式的定界符可以嵌套,但是不能多层嵌套(比如,双引号可以包含单引号,这时单引号中不能再包含双引号了)。正如上篇所说,一个字符串值可以拆分为数行,每行必须以反斜线(\)结束,这时反斜线和行结束符都不算是字符串内容,即字符串本身并非是多行,只是写成了多行的形式。
注意:①在JavaScript中字符串是固定不变的(除非重新赋值),类似replace()和toUpperCase()的方法都返回新字符串,原字符串本身并没有变化;②字符串可以当做只读数组,除了使用charAt()方法来查询一个单一字符,也可以使用方括号的方式来访问字符串中的单个字符(16位值),例如:
s = "hello, world"; s[0] //=>"h"
2.2 Watak melarikan diri
Maksud watak melarikan diri
o aksara NUL (u0000)
b Aksara ruang belakang (u0008)
t Tab mendatar (u0009)
n aksara baris baharu (u000A)
v Tab menegak (u000B)
f membentuk aksara suapan (u000C)
r pemulangan gerabak (u000D)
" Petikan berganda (u0022)
' Apostrof atau petikan tunggal (u0027)
\ Sentak ke belakang(u005C)
xXX aksara Latin-1 yang ditentukan oleh nombor perenambelasan dua digit XX
aksara Unicode uXXXX ditentukan oleh nombor perenambelasan 4 digit XXXX
Nota: Jika aksara "" mendahului aksara yang tidak disenaraikan dalam jadual, aksara "" diabaikan. Sebagai contoh, "#" dan "#" adalah setara. Jangan lupa bahawa garis miring ke belakang juga mempunyai peranan dalam menggunakan garis miring ke belakang pada penghujung setiap baris dalam rentetan berbilang baris.
3 nilai Boolean
Nilai dalam JavaScript boleh ditukar kepada nilai Boolean. Antaranya, null, undefined, 0, -0, NaN, "" (rentetan kosong), 6 nilai ini akan ditukar kepada false, false dan enam nilai ini kadangkala dipanggil "false values"; nilai lain, termasuk Objek (tatasusunan) akan ditukar kepada benar, dan benar dan nilai ini dipanggil "nilai sebenar". Nota: Boolean mengandungi kaedah toString(), jadi anda boleh menggunakan kaedah ini untuk menukar rentetan kepada "benar" atau "palsu", tetapi ia tidak mengandungi kaedah lain yang berguna.Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.