DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> Javascript學習筆記一 之 數據類型
Javascript學習筆記一 之 數據類型
編輯:JavaScript基礎知識     
一.數據類型
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有兩種數據類型的轉換方法:
  一種是將整個值從一種類型轉換為另一種數據類型(稱作基本數據類型轉換),
  另一種方法是從一個值中提取另一種類型的值,並完成轉換工作。
  基本數據類型轉換的如以下三種方法:
    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必須記住裡面參數是轉換成字符串再做轉換的。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved