js包裝類


JS的數據類型:

基本類型:Undefined, Null, Boolean, Number, String
引用類型:Object, Array, Date, RegExp (其實就是對象)

JS中只有對象才有屬性和方法,原始值沒有屬性和方法
那么我們平常求字符串的長度 用length屬性不是沒有問題嗎?

 var str="hello world";
    var long=str.length;
     console.log(long);   //得出結果為11

這是因為js中提供了三種特殊的引用類型(String Number Boolean)每當我們給原始值賦屬性值時 后台都會給我們偷偷轉換 調用包裝類
怎么進行“包裝”的?

舉個例子 用事實說話吧:(注釋的部分就是后台為我們偷偷干的事)

var str="hello word";
 //var str = new String("hello world"); // 1.創建出一個和基本類型值相同的對象
 //var long = str.length; // 2.這個對象就可以調用包裝對象下的方法,並且返回結給long變量
 //str = null;  //  3.之后這個臨時創建的對象就被銷毀了

 var long=str.length; //因為str沒有length屬性 所以執行這步之前后台會自動執行以上三步操作
 console.log(long);   // (結果為:10)

 //var str = new String("hello word"); // 1.因為下面有輸出創建出str.length 而str不應該具有length這個屬性 所以再次開辟空間創建出一個和基本類型值相同的對象
 //str.length=nudefined; // 2.因為包裝對象下面沒有length這個屬性沒有值,所以值是未定
 //str = null;  //  3.這個對象又被銷毀了

   console.log(str.length) // (結果為:undefined)


給基本類型添加屬性和方法:

可是我們如果想給基本類型添加屬性和方法,又該怎么辦呢?
可以在基本包裝類的原型上實現:

當然 如果要計算字符串的長度這是完全沒有必要的,你使用length屬性就可以了 這里只是展示了一種 給基本類型添加屬性的方法

//給字符串添加方法  要寫到對應的包裝對象的原型下才行
  var str= "hello world";
  //若我們想在原型上設置一個屬性long 保存字符串的長度
  //var str = new String("hello world");// 1.找到基本包裝對象,創建一個和字符串值相同的對象,
  //String.prototype.long=str.length; // 2.通過這個對象找到了包裝對象下的方法並調用
  //str=null; //  3.這個剛創建的對象被銷毀
  String.prototype.long=str.length;//  執行到這一句,同樣因為沒有length屬性 后台會偷偷的執行上述三步操作
  console.log(str.long); //結果為:11

 
注意:這樣因為你是給基本類型string的原型上添加的屬性,所以任意一個字符串都可以訪問到這個屬性及此值。(所以不提倡這種做法)

var str= "hello world";
var str2="哈哈 我的長度也為11嗎?";
  String.prototype.long=str.length;
  console.log(str2.long);   //結果為:11 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM