從變數看javaScript

來源:互聯網
上載者:User

標籤:boolean   console   複製   opera   種類   檢測   ==   就會   正則   

一、從儲存看變數

       在js中,變數按儲存方式來說,有兩種類型,一是實值型別,二是參考型別。

       先說實值型別,在js中,實值型別有Number、String、 Boolean、undefined、null。那麼在記憶體中,實值型別儲存的就是這些基本資料變數的值,如果我們要對這些變數進行複製,那麼我們需要一塊新的記憶體空間來存放複製的值。
那參考型別又是什麼呢,參考型別在js中有對象、函數、數組,作為參考型別,他們都可以無限的擴充屬性,那麼當一個參考型別擴充的屬性非常多的時候,我們進行複製是不是就要拿出一塊相應的空間去存放,那佔得記憶體就會非常大了,所以參考型別存放的只是一個引用也就是一個指標,指向在堆中真正的資料。
在這裡舉一個可能不是很恰當的例子,我們把房子作為記憶體空間,聲明的變數就是房子裡的東西,實值型別是什麼呢?我看了你這個房間,我也很想要,於是乎我就建立了一個房子,然後把其中的東西原封不動的複製一份搬到我的房子裡,這就是實值型別複製的特性。下面看代碼例子:

1 var home = "精裝修房子";  // 建立一個字串類型的值2 var newHome = home;     // 我也擁有了一棟一模一樣的房子3 newHome = "別墅";          // 現在我把房子蓋成了別墅4 console.log(home);           // "精裝修房子",是互不影響的
實值型別

       那麼參考型別是什麼呢,就是我很喜歡你這個房子,那你就把鑰匙配給我一把,我也可以使用這個房子,但是我對這個房子的使用方式也會影響到你的使用,我往裡面填了一個電視,那麼你用的時候電視是在裡面的了。下面看代碼:

 1 //  一個新房子 2 var home = { 3     name: "居客"; 4     bed: "木板床" 5 };  6 // 我很喜歡,給我一把鑰匙 7 var me = home; 8 // 修改房子,買一個電視 9 me.TV = "長虹";10 console.log(home);
參考型別
二、typeof和instanceof

       在面試的時候我們會經常的遇到一個這樣的問題,typeof的傳回值有什麼,或者是說直接給你一個語句問你傳回值是什麼。

       那麼typeof的傳回值究竟有哪些呢?

 1 typeof undefined;  // undefined 2 typeof 18;  //number 3 typeof "juke";  //string 4 typeof null; //object 5 typeof {}; //object 6 typeof []; //object 7 typeof function(){}; //function 8  9 // 其實還有一種在ES6中定義的基本類型Symbol,這裡不多介紹10 typeof Symbol();  //symbol
typeof

       可以看到,我們使用typeof對於參考型別來說,只能夠分辨出function,但是對數組、對象來說,typeof十分不出來的。

       那麼instanceof就能夠派上用場了,它可以判斷一個函數是不是一個變數的建構函式。

1 var arr = [];2 arr instanceof Array;  //true

       現在看來是能夠檢測是不是數組了,但是在一些特別的環境下,我們要使用ES5中的新特性去檢測數組。

1 var arr = [];2 Array.isArray(arr); //true

       但是這個屬性在瀏覽器中有比較大的限制,只有IE9+、Chrome、Firefox4+、Safari5+、opera10.5+的瀏覽器才會支援,那麼還有沒有更穩妥的方式去檢測數組呢,當然有,數組也是對象,我們可以通過,object的toString方法來判斷。

1 var arr = [];2 function isArray(arr) {3        return Object.prototype.toString.call(arr) == ‘[object Array]‘;4 }5 6 isArray(arr);  // true
View Code

       同理我們可以對原生函數以及正則來進行檢測。

三、變數的強制類型轉換

       在js中我們常常會遇到的強制類型轉換有下面幾種:

  • 邏輯運算子
  • 在if語句中的類型轉換
  • 當使用==的時候進行轉換
  • 在進行字串拼接的時候
  • 以及使用parseInt()、Number()等方法的時候


從變數看javaScript

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.