undefined == null; // true undefined值是派生自null值的 1 == true; // true 比較值,容易理解 2 == true; // false 比較的時候,true轉化成1,false轉化成0 0 == false; // true 0 == ''; // true NaN == NaN; // false NaN與任何值都不相等,包括NaN自己, [] == false; // true [] == ![]; // true 引用類型
JavaScript的引用數據類型是保存在堆內存中的對象,與其餘語言不一樣的是,你不能夠直接訪問堆內存空間中的位置和操做堆內存空間。只能操做對象在棧內存中的引用地址。javascript
把變量從字符串格式的數字轉換成數字類型:string - 0;java
把變量從數字轉換成字符串類型:number + '';函數
字符串、數值轉換成布爾類型:!!string、!!number;性能
一樣的null和undefined也能夠轉換成布爾類型:!!null、!!undefined;spa
Date類型轉換成Number類型:new Date().getTime();指針
基本類型中的Number、String和Boolean都有對應的包裝類型。code
var str = 'string'; // 原始類型
var strObj = new String(str); // 包裝類型
strObj.valueOf(); // 返回原始類型
var num = 123; // 原始類型
var numObj = new Number(num); // 包裝類型
numObj.valueOf(); // 返回原始類型
var boo = !!123;// 原始類型
var booObj = new Boolean(123); // 包裝類型
booObj.valueOf();// 返回原始類型
1)原始值:存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。這是由於這些原始類型佔據的空間是固定的,因此可將他們存儲在較小的內存區域 – 棧中。這樣存儲便於迅速查尋變量的值。對象
2)引用值:存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存地址。這是由於:引用值的大小會改變,因此不能把它放在棧中,不然會下降變量查尋的速度。相反,放在變量的棧空間中的值是該對象存儲在堆中的地址。地址的大小是固定的,因此把它存儲在棧中對變量性能無任何負面影響。blog
1)原始值:只是把變量裏的值傳遞給參數,以後參數和這個變量互不影響。ip