JavaScript筆記:原始值物件包裝類
阿新 • • 發佈:2018-12-18
原始值有數字、字串、布林值、undefined、null。
但是在JavaScript中,
-
數字可分為:原始值數字,數字型別物件。
-
字串可分為:原始值字串,字串型別物件。
-
布林值可分為:原始值布林值,布林值型別物件。
-
但是undefined、null沒有上面這些東西。
可以像下面這樣生成原始值物件:
var num = new Number(123); var str = new String('abcd'); var bol = new Boolean('true'); ------------------------ num Number {123} ------------------------ str String {"abcd"} ------------------------ bol Boolean {true}
下面講講包裝類
在下面程式碼中,num並不是一個物件,所以它不包含屬性和方法,應該報錯,但是並沒有。
var num = 4;
num.len = 3; // 在這裡num是原始值,原始值沒有方法函式,那怎麼辦呢
// 建立new Number(4).len = 3; 系統會建立數字型別物件,是為了不讓系統報錯, 然後會delete
console.log(num.len);
// 建立new Number(4).len; 同樣是為了不報錯
----------------------------------
輸出結果為:undefined
在num.len = 3; 這裡,系統會新建一個數字物件new Number(4).len = 3; delete
來一道測試題:
var str = "abcd";
str.length = 2;
console.log(str);
--------------------------
abcd
這裡字串abcd並沒有被截斷,原理同上。
var str = "abcd"; //為不報錯,建立new String('abcd').length = 2; delete str.length = 2; //再訪問str時,上面一步對str並沒有起作用,沒影響,所以還是輸出abcd。 console.log(str); //而如果這裡訪問console.log(str.length), //系統會建立,new String('abcd').length,輸出其值,4;
再來一道測試題:
var str = "abc";
str += 1;
var test = typeof(str); str = "string"
if(test.length == 6){
test.sign = "typeof的返回結果可能為String";
}
console.log(test.sign);
--------------------------------
undefined
輸出結果並不是定義好的字串,而是undefined。解釋如下:
var str = "abc";
str += 1;
var test = typeof(str); str = "string"
if(test.length == 6){
test.sign = "typeof的返回結果可能為String";
//在這建立new String(test).sign = "xxx";
}
//當要再次呼叫test.sign時,
//又會建立new String(test).sign,這個物件和上面的沒關係。這裡為空,輸出值為undefined。
console.log(test.sign);