首頁 >web前端 >js教程 >JavaScript資料型別學習筆記_javascript技巧

JavaScript資料型別學習筆記_javascript技巧

WBOY
WBOY原創
2016-05-16 15:18:241368瀏覽

ECMAscript 中有5種簡單的資料類型,也稱為基本資料類型:Undefined、Null、Boolean、Number和String。還有一種複雜的資料類型—Object。

Undefined 類型

在使用var 宣告變數但未對其進行初始化時,這個變數的值就是undefined。如:

var number;
document.write(number); //undefined

如果沒有宣告變數就會出現下面這種錯誤。如:

document.write(str); //错误

但是用typeof對其進行執行時,不管有沒有宣告都會傳回undefined 值。如:

var num;
document.write(typeof num); //undefined
document.write(typeof str); //undefined

Null 類型

使用typeof偵測null 時會回傳"object"。如:

var num = null;
document.write(typeof num); //object

實際上undefined 值是衍生自null 值的,因此他們相等都會回傳true。如:

alert(null == undefined); //true

這裡要注意的是,只要意在保存對象的變數還沒有真正保存對象,就應該明確地讓該變數保存null 值,此舉有助於區分null 和 undefined。如:

var num1 = null;
var num2;
document.write(typeof num1 + " " + typeof num2); //object undefined

Boolean 型

要將一個值轉換為其對應的Boolean 值,可以使用轉型函數Boolean()。如:

var str = "helloworld";
document.write(Boolean(str)); //true

《JavaScript高級程式設計》一書中的3.4.4中給出了關於各種資料類型及其對應的轉換規則表格。大概有以下幾種:

  • 當資料型別為String 時,任何非空字串都會轉換為true;
  • 當資料型別為Number 時,除了0 和NaN 會轉換為false 之外,其他都會轉換為true;
  • 當資料型別為Object 時,除了null 之外,都會轉換為true;
  • 當資料型別為Undefined 時,n/a 會轉換為true,undefined 會轉換成false;

這裡要注意的是,if 語句經常使用自動執行回應的Boolean 轉換作為條件。如:

var str = "helloworld";
if (str){
  document.write("hellothere");
} //hellothere

Number 類型

除了可以以十進位表示之外,整數還可以透過八進位或十六進位的字面值來表示,其中八進位字面值的第一位必須是0,然後是八進位數字序列(0~7)。如:

var num1 = 070; //八进制的56
var num2 = 032; //八进制的32
var num3 = 079; //错误的八进制(>7)
var num4 = 09; //错误的八进制(>7)

十六進位字面值的前兩位必須是0x,後面跟任何十六進位數(0~9 及 A~F)。如:

var num1 = 0xA; //十六进制的10
var num1 = 0xa; //也是十六进制的10(字母不区分大小写)

浮點數值

這裡要注意的是,永遠不要比較特定的浮點數值。如:

var a = 0.1;
var b = 0.2;
if (a + b == 0.3){
  document.write("you are right")
} //因为0.1 加上0.2 实际上等于0.30000000000000004

數值範圍

ECMAScript 能夠表示的最大和最小數值保存在Number.MAX_VALUE 和Number.MIN_VALUE 之中。要確定一個數值是不是有窮的,可以使用isFinite()函數。如:

document.write(isFinite(Number.MAX_VALUE + Number.MAX_VALUE)); //false

NaN

0 除以0 會回傳NaN,正數除以0 會回傳Infinity,複數則會回傳-Infinity。其次,NaN 與任何數值都不相等,包括它本身。另外函數isNaN()可以幫助我們確定這個參數是否「不是數值」。如:

document.write(isNaN("a")); //true;
document.write(isNaN("324")); //false;
document.write(isNaN(true)); //false;
document.write(isNaN(false)); //false;
document.write(isNaN(NaN)); //true;

數值轉換

有三個函數可以把非數值轉換成數值:Number()、parseInt()、parseFloat()。

Number()的轉換法則如下:

如果是Boolean 值,true 和false 會轉換為1 和0。
如果是數字值,則不變。
如果是null 值,則轉換為0。
如果是undefined,返回NaN。
如果是字串則遵循下列規則:

  • 如果只有數字,則轉換為十進位數數值。
  • 如果是浮點格式,則將其轉換成對應的浮點數值。同樣也會忽略前導零。
  • 如果是十六進位格式則會轉換成十進位數。
  • 如果字串是空的,則會轉換成0。
  • 其他情況則會轉換為NaN。

具體看下面的範例:

document.write(Number(true)); //1
document.write(Number(false)); //0
document.write(Number("789")); //789
document.write(Number(null)); //0
document.write(Number(undefined)); //NaN
document.write(Number("02.0942")); //2.0942
document.write(Number(0xa)); //10
document.write(Number("")); //0
document.write(Number("fdsa")); //NaN

parseInt()的转换规则如下:

  • 如果第一个字符不是数字字符或者符号,parseInt()会返回NaN。
  • 用parseInt()转换空字符串会返回NaN。
  • 如果第一个字符是数字字符,它会继续解析第二个字符,直到遇到了一个非数字字符.

下面是具体的例子:

document.write(parseInt("fds")); //NaN
document.write(parseInt("")); //NaN
document.write(parseInt("1111112abc")); //1111112
document.write(parseInt("-1111112abc")); //-1111112
document.write(parseInt("+1111112abc")); //-1111112
document.write(parseInt("0xa")); //10
document.write(parseInt("0022.00009")); //22
document.write(parseInt("070")); //ECMAScript 3认为是56(八进制), ECMAScript 5认为是70(十进制)

另外需要注意的是,ECMAScript 5已经不具备解析八进制值的能力了所以为了消除这个问题,可以为这个函数提供第二个参数:转换时使用的基数(多少进制),具体如下:

document.write(parseInt("070",10)); //70
document.write(parseInt("070",8)); //56
document.write(parseInt("070",16)); //112

多数情况下,最好默认设置成10进制。

parseFloat()的转换规则如下:

  • 与parseInt()类似,不同的是字符串第一个小数点是有效的,而从第二个小数点开始包括第二个小数点是无效的。
  • 他不能解析十六进制数值!!!
  • 他只能解析十进制数值!!!
  • 他没有用第二个基数来指定进制的用法。

下面是具体的例子:

document.write(parseFloat("421")); //421
document.write(parseFloat("0421.32.1")); //421.32
document.write(parseFloat("0xaafd")); //0
document.write(parseFloat("070")); //70
document.write(parseFloat("070abc")); //70
document.write(parseFloat("")); //NaN
document.write(parseFloat("abc")); //NaN

String 类型

要把一个值转换成字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。如下:

document.write((533).toString(10)); //"533"
document.write((0xa).toString(10)); //"10"
document.write((0xa).toString(2)); //"1010"
document.write((true).toString(10)); //"true"
document.write((false).toString(10)); //"false"

另外需要注意的是,null 和 undefined 不能转换。

document.write((null).toString(10)); //
document.write((undefined).toString(10)); //

如果不知道需要转换的数值是否是null 或者undefined 则应该使用转型函数String(),如果是null 会返回"null"如果是undefined 会返回"undefined"。如下:

document.write(String(null)); //"null"
document.write(String(undefined)); //"undefined"

另外在下一篇文章中再详细介绍Object 类型。

以上就是关于JavaScript数据类型的简单介绍,希望对大家学习JavaScript数据类型有所帮助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn