欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript學(xué)習(xí)筆記一 之 數(shù)據(jù)類型

 更新時(shí)間:2010年12月15日 21:53:06   作者:  
在接觸每一門編程語言之前,首先明白我們程序設(shè)計(jì)要處理的是數(shù)據(jù),而數(shù)據(jù)又用數(shù)據(jù)類型將其區(qū)分。
一.數(shù)據(jù)類型
Javascript是一種弱類型的腳本語言,它一共有6種數(shù)據(jù)類型,又被分為基礎(chǔ)數(shù)據(jù)類型,特殊數(shù)據(jù)類型,復(fù)合數(shù)據(jù)類型。
   1.基礎(chǔ)數(shù)據(jù)類型:數(shù)值型,字符串型,布爾型
   2.特殊數(shù)據(jù)類型:null,undefined(區(qū)別在于null需要顯性賦值,而undefined表示沒有賦值)
   3.復(fù)合(引用)數(shù)據(jù)類型:Object(數(shù)組是特殊的對(duì)象)

注:理解基礎(chǔ)數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別。如函數(shù)參數(shù)傳遞

二. 包裝類和基礎(chǔ)數(shù)據(jù)類型的關(guān)系
對(duì)于基礎(chǔ)數(shù)據(jù)類型,都有相應(yīng)的包裝類(Object對(duì)象)與之對(duì)應(yīng)。
Number,String,Boolean

注:基礎(chǔ)數(shù)據(jù)類型會(huì)在一定條件下轉(zhuǎn)化成基礎(chǔ)類型包裝對(duì)象
復(fù)制代碼 代碼如下:

var str="這是一個(gè)基礎(chǔ)字符串";
var length=str.length();
//當(dāng)使用length()時(shí),Javascript解釋引擎會(huì)產(chǎn)生
//一個(gè)str的臨時(shí)String對(duì)象,執(zhí)行完后臨時(shí)對(duì)象清除

三.如何判斷數(shù)據(jù)類型
(1) typeof(雞肋)
  僅可檢測(cè)出以下6種數(shù)據(jù)類型:number, string, boolean, undefined, object, function(注意!)
復(fù)制代碼 代碼如下:

alert(typeof(null)); //結(jié)果為object
alert(typeof(a)); //a未賦值,結(jié)果為undefined

因此判斷基礎(chǔ)數(shù)據(jù)類型可以如下:
復(fù)制代碼 代碼如下:

function type(o) {
return (o === null) ? 'null' : typeof(o);
}

(2)instanceof
    但對(duì)于復(fù)合數(shù)據(jù)類型(除了function),則全部返回object,無法通過typeof判斷
可使用instanceof檢測(cè)某個(gè)對(duì)象是不是另一個(gè)對(duì)象的實(shí)例,注意instanceof的右操作數(shù)必須為對(duì)象:
復(fù)制代碼 代碼如下:

function Animal() {};
function Pig() {};
Pig.prototype = new Animal();
alert(new Pig() instanceof Animal); // true

  instanceof不適合用來檢測(cè)一個(gè)對(duì)象本身的類型

  (3)constructor
復(fù)制代碼 代碼如下:

alert(1.constructor); // 報(bào)錯(cuò)
var o = 1;
alert(o.constructor); // Number
o = null; // or undefined
alert(o.constructor); // 報(bào)錯(cuò)
alert({}.constructor); // Object
alert(true.constructor); // Boolean

(4)Object.toString()
復(fù)制代碼 代碼如下:

function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}


call和apply的區(qū)別:
  它們都是Function.prototype的方法(針對(duì)方法的),它是Javascript引擎內(nèi)在實(shí)現(xiàn)的。
  實(shí)際上這兩個(gè)的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數(shù)可以是變量,而apply([thisObj[,argArray]])中的參數(shù)為數(shù)組集合
  方法是借給另一個(gè)對(duì)象的調(diào)用去完成任務(wù),原理上是方法執(zhí)行時(shí)上下文對(duì)象改變了.

(5)總結(jié)
復(fù)制代碼 代碼如下:

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');
}

四.數(shù)據(jù)類型轉(zhuǎn)換
Javascript有兩種數(shù)據(jù)類型的轉(zhuǎn)換方法:
  一種是將整個(gè)值從一種類型轉(zhuǎn)換為另一種數(shù)據(jù)類型(稱作基本數(shù)據(jù)類型轉(zhuǎn)換),
  另一種方法是從一個(gè)值中提取另一種類型的值,并完成轉(zhuǎn)換工作。
  基本數(shù)據(jù)類型轉(zhuǎn)換的如以下三種方法:
    1.轉(zhuǎn)換為字符型:String(); 例:String(678)的結(jié)果為"678"
    2.轉(zhuǎn)換為數(shù)值型:Number(); 例:Number("678")的結(jié)果為678
    3.轉(zhuǎn)換為布爾型:Boolean(); 例:Boolean("aaa")的結(jié)果為true
  從一個(gè)值中提取另一種類型的值的如以下方法:
    1.提取字符串中的整數(shù):parseInt(); 例:parseInt("123zhang")的結(jié)果為123
    2.提取字符串中的浮點(diǎn)數(shù):parseFloat(); 例:parseFloat("0.55zhang")的結(jié)果為0.55

  
另外總結(jié)各種類型轉(zhuǎn)換的方法

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

s = (0.0000001).toString();
alert(parseInt(s));

最后得到1就不奇怪了。
  使用parseInt必須記住里面參數(shù)是轉(zhuǎn)換成字符串再做轉(zhuǎn)換的。

相關(guān)文章

最新評(píng)論