基本類型和引用類型對象
基本類型ip
- 按值訪問,能夠操做保存在變量中實際的值
- 基本類型存在棧內存
- 當基本類型調用對象的方法時,不會起效,底層會有一個叫包裝對象酷炫操做,效果是...不報錯
引用類型內存
- 複製:操做的是對象的引用
- 添加屬性:操做的是實際的對象
- 引用類型數據存在堆內存,而引用存在棧區,也就是說引用類型同時保存在棧區和堆區
- 引用類型的比較是比較引用
==的類型轉換
關於==的執行機制,ECMASript有規範,由於==先後的值交換順序,返回的值也是同樣的,因此在此對規範作出以下總結string
- 二者類型相等的話,返回 ===的結果,===不存在類型轉換
------因此一下都是不相等的狀況--------變量
- null 和 undefined 相等 反過來也同樣
- 一個是String,另外一個是number,把string轉化爲number 而後在作 ==
- 只要有一個類型是boolean,把boolean轉化爲number 而後在作 ==
- 一個是number或者string,另一個是對象,把對象轉化爲原始類型 而後在作 ==
- 二者都是引用類型,看是否是同一個引用
若是以上狀況都不是,返回false
引用轉原始類型引用
- 優先調用valueOf方法(若是有),有原始值返回,結束
- 不然,調用toString方法(若是有)
- 其餘報錯。
總之,類型不相等的狀況下,引用類型一頓轉換變成原始類型,原始類型一頓轉換變成number類型
例1
[] == false
類型不相等,往下走
發現有一個是boolean -> [] == 0
發現一個是對象 -> '' == 0
一個是string,一個是number -> 0 == 0
返回 true
例2
false == undefined
第4條 0 == undefined
而後哪條都不是,只好返回false方法