2017年11月29日 星期三

[ JavaScript Gossip ] JavaScript 核心 : 這些東西不簡單 (資料型態)

轉載自 這裡 
在 JavaScript 中,有基本(Primitive)資料型態複合(Composite)資料型態,還有兩個特殊的值 null 與 undefined. 基本資料型態包括了數值、字串與布林值,型態名稱分別為 number、 
string 與布林值 boolean. 在 JavaScript 中,沒有整數與浮點數的區別,數值都是 IEEE 754標準64位元浮點數,可表示的數字最小精度可達正負 Number.MIN_VALUE(5e-324),而最大範圍可達正負 Number.MAX_VALUE(1.7976931348623157e+308)。如果單純表示整數,則以32位元處理,也就是整數可表示的範圍為負2^(31)到正2^(31-1). 
與其它程式語言相同,撰寫數值時要使用數值實字(Number literal),預設是十進位整數,也可以用 0 開頭表示八進位整數,或是用 0x 開頭表示十六進位整數。例如 : 
10(十進位)
0677(八進位)
0xFF(十六進位)

若要表示浮點數,則可使用科學記號表示。例如 : 
3.14
5.231E13(5.231 * 1013)
1.31E-32(1.31 * 10-32)

數值有幾個特殊值,例如 Infinity 表示無限大,Number.POSITIVE_INFINITY 表示正無限大,Number.NEGATIVE_INFINITY表示負無限大。另外還有 NaN 或 Number.NaN 表非數值(Not a Number),例如你嘗試作 1 / 'two'時,就會出現 NaN 的結果。注意,NaN不等於任何值,NaN 也不等於 NaN,如果你要測試某值結果是否為 NaN,則要用 isNaN()函式來測試。例如 : 
> NaN != NaN
true
> isNaN(NaN)
true
> isNaN(1/'two')
true

在 JavaScript 中,字串是基本資料型態,可使用單引號或雙引號來包括一串文字,用以表示字串. JavaScript 中沒有字元,若想表示某個字元,則以單引號或雙引號來包括單一字元,但仍是字串型態。例如 : 
> var ch1 = 'A'
undefined
> var ch2 = "B"
undefined
> typeof ch1
'string'
> typeof ch2
'string'

typeof 可以用來測試某資料的型態,會傳回型態的字串描述,例如,對數值使用 typeof 會傳回 'number'。上例中,ch1 與 ch2 參考的型態都是 'string'。在撰寫字串實字(String literal)時可使用單引號或雙引號,一般習慣在 JavaScript
程式中採用單引號,而將雙引號保留給HTML使用
,避免跳脫文字的麻煩。例如 : 
var html =  '<input type="text" value="defalut">';

布林值只有兩個值,true 與 false,分別表示真與假,對布林值使用 typeof,結果會是 'boolean'. 複合資料型態就是指物件(object),基本上它們都是 Object 的實例,使用 typeof 測試複合資料型態的結果就是'object'。例如 : 
> var o1 = new Object(); var o2 = {}; var o3 = [1,2,3]
undefined
> typeof o1
'object'
> typeof o2
'object'
> typeof o3
'object'


null 是 JavaScript 中特殊的值,表示沒有任何東西。應用的時機就是在變數不參考至任何物件時,可以指定變數為 null,或測試變數是否參考至 null
> var x = null
undefined
> if(x == null) console.log('x=null')
x=null
undefined


如果你想知道某個物件是誰的實例,可以使用 instanceof 來測試。例如 : 
> var x1 = {}; var x2 = []
undefined
> if(x1 instanceof Object) 'x1 instanceof Object = true'
'x1 instanceof Object = true'
> if(x2 instanceof Object) 'x2 instanceof Object = true'
'x2 instanceof Object = true'
> if(x2 instanceof Array) 'x2 instanceof Array = true'
'x2 instanceof Array = true'


null 使用 typeof 的結果會是 'object',這很怪([color=brown]只能強記),因為用 instanceof 測試 null 是否為 Object 的實例,結果卻是false[/color]. 
> typeof null
'object'
> null instanceof Object
false

注意!以下的 x 值有參考至一個值,那就是 null,而不是 undefined : 
var x = null;

以下的 x 才是undefined : 
var x;

undefined 是 JavaScript 中特殊的值,當你試圖取得某個沒指定任何值的變數(也沒指定null)或特性(Properties)時,就會出現 undefined 的結果。對 undefined 使用 typeof 的結果是 'undefined'。注意,在 Rhino Shell 中,undefined 不會顯示任何結果! 最後 undefined 本身等於 undefined(雖然實務上不會有人這麼測試). 
> var y = undefined
undefined
> typeof y
'undefined'
> undefined == undefined
true


Supplement 
W3CSchools - JavaScript Data Types

沒有留言:

張貼留言

[ Python 常見問題 ] Get all object attributes in Python?

Source From  Here   Question   Is there a way to  get all attributes/methods/fields/etc. of an object in Python ?  vars()  is close to what ...