
JavaScript 語言核心(2)與眾不同的資料型態
在 JavaScript 中,有基本(Primitive)資料型態、複合(Composite)資料型態,還有兩個特殊的值 基本資料型態包括了數值、字串與布林值,型態名稱分別為 在 JavaScript 中,沒有整數與浮點數的區別,數值都是 〈IEEE 754 標準 64 位元浮點數〉,可表示的數字最小值為 與其他程式語言相同,撰寫數值時要使用數值實字(Number literal),預設是十進位整數,也可以用 0 開頭表示八進位整數,或是用 0x 開頭表示十六進位整數。例如: 10(十進位) 0677(八進位) 0xFF(十六進位) 不過在 ECMAScript 5 的嚴格模式(Strict mode)下,不允許八進位表示法,因此執行以下的 .js 檔案將會有 'use strict'; var x = 0677; 若要表示浮點數,則可使用科學記號表示。例如: 3.14 5.231E13(5.231 * 1013) 1.31E-32(1.31 * 10-32) 數值有幾個特殊值,例如 注意, > NaN === NaN; false > isNaN(NaN); true > isNaN(1 / 'two'); true > 不過, > isNaN('caterpillar'); true > isNaN(undefined); true > isNaN('0'); false > 所以, function isRealNaN(value) { return value !== value; } console.log(isRealNaN(NaN)); // true console.log(isRealNaN('caterpillar')); // false console.log(isRealNaN(undefined)); // false 問題並不會這麼結束,雖然 > typeof NaN; 'number' > 當然,在 JavaScript 中, function isRealFiniteNumber(value) { return typeof value === 'number' && isFinite(value); } console.log(isRealFiniteNumber(NaN)); // false console.log(isRealFiniteNumber(Infinity)); // false console.log(isRealFiniteNumber('93')); // false console.log(isRealFiniteNumber(93)); // true 在 JavaScript 中,字串是基本資料型態,可使用單引號或雙引號來包括一串文字,用以表示字串。例如: var str1 = 'text1'; var str2 = "text2"; JavaScript 中沒有字元型態,以單引號或雙引號來包括單一字元,都是字串型態。例如: > typeof 'A'; 'string' > typeof "B"; 'string' >
var html = '<input type="text" value="defalut">'; 布林值只有兩個值, 複合資料型態就是指物件(object),基本上它們都是 > typeof new Object(); 'object' > typeof {}; 'object' > typeof []; 'object' >
> var x = null; undefined > x === null; true > 如果你想知道某個物件是哪個型態的實例,可以使用 > var x1 = {}; undefined > var x2 = []; undefined > x1 instanceof Object; true > x2 instanceof Object; true > x1 instanceof Array; false > x2 instanceof Array; true > 對 > typeof null; 'object' > null instanceof Object; false > 注意!以下的 var x = null; 以下的 var x;
(在 Rhino Shell 中, 注意,別與直譯錯誤時出現的「未定義」訊息搞錯了,例如,以下的示範中,並沒有事先宣告 > var y = x; ReferenceError: x is not defined at repl:1:9 at REPLServer.self.eval (repl.js:110:21) at repl.js:249:20 at REPLServer.self.eval (repl.js:122:7) at Interface.<anonymous> (repl.js:239:12) at Interface.EventEmitter.emit (events.js:95:17) at Interface._onLine (readline.js:202:10) at Interface._line (readline.js:531:8) at Interface._ttyWrite (readline.js:760:14) at ReadStream.onkeypress (readline.js:99:10) > 如果是以下的程式,是可以正確執行的程式碼, > var x; undefined > var y = x; undefined > x undefined > y undefined >
> undefined === undefined; true > |