JavaScript 的數據類型 相關知識點

(1)基本數據類型介紹html

JavaScript的數據類型分爲兩類:原始類型(primitive type)和對象類型(object type)編程

          或者說是:能夠擁有方法的類型和不能擁有方法的類型數組

          或者說是:可變(mutable)類型和不可變(immutable)類型編程語言

 

原始類型主要包括:數字(number)、字符串(string)、布爾值(boolean)、undefined (通常來講 未定義的值和定義未賦值的爲undefined函數

        其中NaN屬於一種特殊的numberspa

對象類型說白了數據類型就是:對象(object)prototype

        其中 null 屬於一種特殊的object3d

        對象(object)是屬性(property)的集合,基本上每一個屬性都由 key/value 構成code

        其中,類能夠看作是對象類型的子類型,主要有:數組(Array)、函數(Function)、日期(Date)、正則(RegExp)、錯誤(Error)類htm

看代碼:

 
var a1; 
var a2 = true; 
var a3 = 1; 
var a4 = "Hello"; 
var a5 = new Object(); 
var a6 = null; 
var a7 = NaN; 
var a8 = undefined; 
alert(typeof a); //顯示"undefined" 
alert(typeof a1); //顯示"undefined" 
alert(typeof a2); //顯示"boolean" 
alert(typeof a3); //顯示"number" 
alert(typeof a4); //顯示"string" 
alert(typeof a5); //顯示"object" 
alert(typeof a6); //顯示"object" 
alert(typeof a7); //顯示"number" 
alert(typeof a8); //顯示"undefined" 

經過簡單的比較能夠發現,null和undefined值相等,但不全等;

NaN與任何值都不相等,包括本身。若是要判斷變量x是不是NaN,經過方法x==NaN 行不通,應該使用x!=x 判斷,固然了,也可使用函數isNaN(x)判斷

函數isNaN() 若是參數是NaN或者是一個非數字值(好比字符串或對象),則返回true

另外Infinity表示無窮大,有相應函數判斷 isFinite(),參數若是不是NaN、Infinity、或-Infinity的時候返回true

負零值是特殊的,和正零值是相等的,但做爲除數時就不同了:

var zero = 0; //
var negz = -0; //
console.log(zero === negz); //true
console.log(1/zero === 1/negz); //false

另外,JavaScript是屬於使用二進制浮點數的編程語言,因此計算浮點數的時候可能會出現問題,應該避免:好比

var z = .4 - .3;
console.log(z);   // 0.10000000000000003
var x = .3 - .2;
console.log(x);   // 0.09999999999999998
var y = .2 - .1;
console.log(y);   // 0.1

 

簡單比較

 
var a1; //a1的值爲undefined 
var a2 = null; 
var a3 = NaN; 
alert(a1 == a2); //顯示"true" 
alert(a1 != a2); //顯示"false"
alert(a1 === a2); //顯示"false" 
alert(a1 == a3); //顯示"false" 
alert(a1 != a3); //顯示"true" 
alert(a2 == a3); //顯示"false" 
alert(a2 != a3); //顯示"true" 
alert(a3 == a3); //顯示"false" 
alert(a3 != a3); //顯示"true" 


能夠擁有方法:就是說能夠擁有方法的類型,好比一個數組具備排序的方法:arr.sort()

      通常來講,對象、數字、字符串、布爾值均可以擁有方法

不能擁有方法:null  undefined之類

 

可變類型:就是說值是能夠修改的,好比一個數組,或者說一個對象,JavaScript程序能夠更改對象屬性值和數組元素的值。

var o = { x: 1};
o.x = 2;  //change
o.y = 3;  //add

 

不可變類型:數字、字符串、布爾值、null、undefined 之類就屬於不可變的

好比說字符串是不可變類型:(通常來講是返回一個新值,而原來的值不變)

var str = "you";
console.log(str.toUpperCase()); //YOU
console.log(str); //you

 

 

而JavaScript變量是屬於無類型(untyped),就是說變量能夠賦予不一樣類型的值。

全局屬性有哪些?好比undefined、Infinity、NaN

全局函數有哪些?好比isNaN()、parseInt()、eval()

全局對象有哪些?好比Math、JSON

構造函數有哪些?好比Date()、RegExp()、String()、Object()、Array()

 

(2)null和undefined的區別

console.log(Number(null)); // null轉換爲0
console.log(5+null);       // 5
console.log(Number(undefined));  //undefined轉換爲NaN
console.log(5+undefined);        //NaN
console.log(null == undefined);  //true
console.log(null === undefined); //false

null 表示 沒有對象,此處不該有值   典型的用法有:
  1.做爲函數的參數,表示該函數的參數不是對象

  2.做爲對象原型鏈的終點

好比:

Object.getPrototypeOf(Object.prototype); //null

undefined表示 缺乏值,本處應該有一個值,可是尚未定義  典型的用法有:
  1.變量被聲明瞭,但尚未賦值時,就等於undefined

  2.調用函數時,應該提供的參數沒有提供,該參數就等於undefined

  3.對象沒有賦值的屬性,該屬性的值就爲undefined

  4.函數沒有返回值時,默認返回undefined

好比:

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined

 

(3)數據類型轉換

JavaScript取值類型很是靈活,類型的轉換也很是靈活,要掌握好,也不是說很容易的

(此部分摘自:http://www.cnblogs.com/2050/archive/2012/08/17/2644189.html

1)轉換成布爾值

程序在 if 語句 以及 ||、&&、! 等邏輯判斷的環境下會把表達式自動轉換成布爾值。  

想要手動轉換某個東西爲布爾值有兩種方法:

  (1)、使用 !! ;  好比 console.log(!!30); //true

    (2)、使用 Boolean(),記住前面不要加new; 好比console.log(Boolean(30)); //true

一、數字轉換成布爾值

除了0和NaN 被轉換成false外,全部自他數字都會被轉換成true

二、字符串轉換成布爾值

這個更簡單,除了空字符串被轉換成false外,全部字符串都會被轉換成true

三、其餘類型轉換成布爾值

undefined和null會被轉換成false, 任何對象(包括數組)和函數都會被轉換成true,記住,是任何

var o = new Boolean(false);
alert(o);//轉換成字符串,結果是false
alert(!!o); //轉換成布爾值,結果是 true

 


2)轉換成字符串

把某一個東西強制轉換成字符串有兩種方法:

'' + x //方法一,用一個空字符串與之相加
String(x) //方法二,使用不帶new的字符串構造函數

一、數字轉換成字符串

這個沒什麼要說的,數字都是按原樣轉換成字符串,但用科學計數法表示的數字(也就是帶e的)會轉換成它內部表明的真實的數字的字符串。

還須要注意的是,當使用二元的加號運算符時,若是兩個運算數中有一個不是數字,則會進行字符串的鏈接操做,而不是數學加法操做,兩個運算數都會被轉換成字符串。當null與數字相加時,不會進行字符串鏈接,而是會把null轉換成0來進行數學元素。

[]+1+3  //結果爲13
[1]+3   //結果爲13
null+1+3  //結果爲4

二、其餘類型轉換成字符串

當對象或函數轉換成字符串時,會調用它們的 toString() 方法來進行轉換,默認的是 Object.prototype.toString 和

Function.prototype.toString,但它們是能夠被咱們自定義的toString方法覆蓋的。當把一個函數轉換成一個字符串時,不
必定就要顯示函數的源代碼,Function.prototype.toString 方法的結果依賴於它的環境是怎麼實現它的。

 

3)轉換成數字

除了加號之外的其餘數學運算符,都會進行轉換爲數字的操做。把一個東西強制轉換成數字也有兩種方法:

+x //使用一個一元的加號運算符,這是最快的方法
x-0 或 x*1 //另外一種形式
Number(x)  //使用不帶new的數字構造函數進行轉換

一、字符串轉換成數字

除了空字符串會被轉換成0之外,若是字符串中是正確的數字書寫形式,那麼均可以順利轉換成相應的數字,不論是小數、科學計數仍是八進制、十六進制形式等。可是若是參雜了其餘不能構成數字或不符合數字書寫規則的東西,則會被轉換成NaN。

NaN是指不是數字的意思,任何數字數字跟NaN進行運算獲得的結果都是NaN,NaN甚至跟本身也不相等。

二、其它類型轉換成數字

對象和函數老是被轉換成NaN, undefined也會被轉換成NaN, 但null會被轉換成0

上面的表遺漏了數組的狀況。數組會首先被轉換成字符串,而後再轉換成數字。

alert(+[]);  //結果爲0
alert(+[1]); //結果爲1
alert(+[1,2]); //結果爲NaN
alert(+new Array(1)); //結果爲0
alert(+new Array(1,2)); //結果爲NaN

三、數字轉換函數

parseInt 好比

console.log(parseInt("123one")); //123
console.log(parseInt("one123")); //NaN


 

parseFloat

 

附表(權威指南)

相關文章
相關標籤/搜索