string
number
boolean
null
undefined
除了這五個之外, 其他都是物件(object)
去掉 null 及 undefined, 其他三個各有對應的 wrapper 物件
string --> String
number --> Number
boolean --> Boolean
Javascript 在執行過程中可以彈性化的轉換基本型別到相對應的 wrapper 物件
var a = "123"; console.log(typeof a); a.test = "456"; console.log(a.test);output
--------------------------------------------
string
undefined
因為是基本型別無法賦予屬性, 所以 a.test 會顯示 undefined
自動轉型成 String 物件
var b = "456"; console.log(b.length);output
--------------------------------------------
3
如果要自訂屬性則必須使用 wrapper 物件
var obj = new String("test"); obj.test1 = "test wrapper object"; console.log(obj.test1); console.log(typeof obj);output
--------------------------------------------
test wrapper object
object
模擬 String 物件內部的操作方式
var obj = { "0" : "t" "1" : "e" "2" : "s" "3" : "t" length: 4 test1: "test wrapper object" }
再來看看 Number 物件
var x = 99; var y = new Number(99); console.log(typeof x); console.log(typeof y); console.log(x == y); console.log(x === y);output
--------------------------------------------
number
object
true
false
比較 x == y 時,會呼叫 valueOf() 取得回傳值,並做比較的動作
var s1 = new String("abc"); var n1 = new Number(111); var b1 = new Boolean(true); console.log(s1 == "abc"); console.log(n1 == 111); console.log(b1 == true); String.prototype.valueOf = function() { return "xyz";} Number.prototype.valueOf = function() { return 999;} Boolean.prototype.valueOf = function() { return false;} console.log(s1 == "abc"); console.log(n1 == 111); console.log(b1 == true); console.log(s1.toString()); console.log(n1.toString()); console.log(b1.toString());output
--------------------------------------------
true
true
true
false
false
false
abc
111
true
0 comments:
Post a Comment