包裝類對象

包裝類對象

引見

js里的三個主原始數據範例(數值,字符串及布爾)每一個都有其對應的對象類。

JavaScript中不僅供應了數值型,字符串型及布爾型,它還供應了數值類,字符串類及布爾類。這些類將對應的原始數據範例包裝了起來,它不只具有其原始數據值,而且還定義了屬性和操縱值的要領。

JavaScript能夠很天真的轉換種種數據範例。當你接見一個字符串的屬性或要領時,JavaScript內部會自動建立其包裝對象。這個字符串包裝對象將替代原始字符串值,它具有已定義的屬性和要領。

如許的運用要領是對的:

var s="hello";//這是一個原始數據值
 
var S=new String("hello");//這是一個字符串對象

typeof s //"string"
typeof S //"object"

字符串在須要的時刻會自動的轉換為字符串對象。當你對S運用+運算符時,一個對應的原始字符串值將被建立,以便實行運算。

記着,這裏議論的一切內容都一樣作用於數值型和布爾型。末了一點,一切的數值,字符串及布爾都能夠經由過程Object()函數轉換成其對應的對象: var number_wrapper=Object(22)

長處

能夠運用許多運用要領

封裝類對象連繫隱式強迫轉換,讓我們能夠運用許多有用的要領。
當對原始值提取屬性 和 舉行要領調用時, 它表現的就像已運用了對應的對象範例封裝了該值一樣。如——

"hello".toUpperCase(); //"HELLO"

瑕玷

獵取和設置原始範例值的屬性會隱式地建立封裝對象,致使沒有相符預期行動

一是,隱式轉換+封裝類 使得對原始值設置屬性,可能會沒有任何作用

"hello".someProperty=17;
"hello".someProperty; //undefined

這會致使有時刻本想給一個對象設置屬性,但沒想到其是個原始值,如許設置的屬性以後獵取不到,會形成隱蔽的毛病。
而且,因為每次隱式封裝都邑發生一個新的String對象,更新第一個封裝對象並不會形成耐久的影響。

當作相稱比較時,原始範例的封裝對象與其原始值行動不一樣

二是,這意味着,你不能運用內置的操縱符來比較兩個判然不同的String對象的內容

var s1 = new String("hello")
var s2 = new String("hello")
s1 === s2 //false

因為每一個String對象都是一個零丁的對象,氣注重值即是本身。關於非嚴厲相稱運算符,效果一樣云云

s1 == s2 //false
    原文作者:MythC
    原文地址: https://segmentfault.com/a/1190000014520911
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞