Javascript學習筆記一 之 資料類型

來源:互聯網
上載者:User

一.資料類型
Javascript是一種弱類型的指令碼語言,它一共有6種資料類型,又被分為基礎資料類型,特殊資料類型,複合資料型別。
   1.基礎資料類型:數值型,字串型,布爾型
   2.特殊資料類型:null,undefined(區別在於null需要顯性賦值,而undefined表示沒有賦值)
   3.複合(引用)資料類型:Object(數組是特殊的對象)

註:理解基礎資料類型和引用資料類型的區別。如函數參數傳遞

二. 封裝類和基礎資料類型的關係
對於基礎資料類型,都有相應的封裝類(Object對象)與之對應。
Number,String,Boolean

註:基礎資料類型會在一定條件下轉化成基礎類型封裝對象 複製代碼 代碼如下:var str="這是一個基礎字串";
var length=str.length();
//當使用length()時,Javascript解釋引擎會產生
//一個str的臨時String對象,執行完後臨時對象清除

三.如何判斷資料類型
(1) typeof(雞肋)
  僅可檢測出以下6種資料類型:number, string, boolean, undefined, object, function(注意!) 複製代碼 代碼如下:alert(typeof(null)); //結果為object
alert(typeof(a)); //a未賦值,結果為undefined

因此判斷基礎資料類型可以如下: 複製代碼 代碼如下:function type(o) {
return (o === null) ? 'null' : typeof(o);
}

(2)instanceof
    但對於複合資料型別(除了function),則全部返回object,無法通過typeof判斷
可使用instanceof檢測某個對象是不是另一個對象的執行個體,注意instanceof的右運算元必須為對象: 複製代碼 代碼如下:function Animal() {};
function Pig() {};
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true

  instanceof不適合用來檢測一個對象本身的類型

  (3)constructor 複製代碼 代碼如下:alert(1.constructor); // 報錯
var o = 1;
alert(o.constructor); // Number
o = null; // or undefined
alert(o.constructor); // 報錯
alert({}.constructor); // Object
alert(true.constructor); // Boolean

(4)Object.toString() 複製代碼 代碼如下:function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}

call和apply的區別:
  它們都是Function.prototype的方法(針對方法的),它是Javascript引擎內在實現的。
  實際上這兩個的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數可以是變數,而apply([thisObj[,argArray]])中的參數為數組集合
  方法是借給另一個對象的調用去完成任務,原理上是方法執行時內容物件改變了.

(5)總結 複製代碼 代碼如下:var _toS = Object.prototype.toString,
_types = {
'undefined' : 'undefined',
'number' : 'number',
'boolean' : 'boolean',
'string' : 'string',
'[object Function]' : 'function',
'[object RegExp]' : 'regexp',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object Error]' : 'error'
};

function type(o) {
return _types[typeof o] || _types[_toS.call(o)] || (o ? 'object' : 'null');
}

四.資料類型轉換
Javascript有兩種資料類型的轉換方法:
  一種是將整個值從一種類型轉換為另一種資料類型(稱作基礎資料型別 (Elementary Data Type)轉換),
  另一種方法是從一個值中提取另一種類型的值,並完成轉換工作。
  基礎資料型別 (Elementary Data Type)轉換的如以下三種方法:
    1.轉換為字元型:String(); 例:String(678)的結果為"678"
    2.轉換為數值型:Number(); 例:Number("678")的結果為678
    3.轉換為布爾型:Boolean(); 例:Boolean("aaa")的結果為true
  從一個值中提取另一種類型的值的如以下方法:
    1.提取字串中的整數:parseInt(); 例:parseInt("123zhang")的結果為123
    2.提取字串中的浮點數:parseFloat(); 例:parseFloat("0.55zhang")的結果為0.55

  
另外總結各種類型轉換的方法

  
Number轉化成字串:String(number) 、
  Number.toString(2/8/16);//分別代表二進位\八進位\十六進位預設(無參)10進位 、
     toFixed(3) //保留小數點後3位
      toExponextial(3); //小數點前1位, 小數點後3位如var n=123456.789; n.toExponextial(3);//1.234e+5即1.234X105
   toPrecision(4); //返回指定位元 如果位元不夠完全顯示,則按指數標記法(3個方法都會4舍5入)
 五.其他總結(容易忽視掉的東西)
1.parseInt的陷阱
以下部分摘自《Javascript精粹》:
parseInt是一個將字串轉換為整數的函數。它遇到非數字時停止解析,所以parseInt("16")與parseInt("16 tons")產生相同的結果。如果該函數提示我們出現了額外文本就好了,但是它不會那麼做。
如果該字串第一個字元時0,那麼該字串將被基於八進位而不是十進位來求值。在八進位中,8和9不是一個數字,所以parseInt("08")和parseInt("09")產生0作為結果。這個錯誤導致程式解析日期和時間時出現問題。幸運的是,parseInt可以接受一個基數作為參數,如此一來parseInt("08",10)結果為8.我建議你總是提供這個基數參數。
另外。下面這個會顯示1:
  
alert(parseInt(0.0000001));
這是由於超過一定精度js就會用科學計數法記錄數字,例如:
  
alert(0.0000001);
會得到1e-7,而parseInt會自動把參數轉換成字串的,那實際上就是:
   複製代碼 代碼如下:s = (0.0000001).toString();
alert(parseInt(s));

最後得到1就不奇怪了。
  使用parseInt必須記住裡面參數是轉換成字串再做轉換的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.