麪點複習小記

背景:面試問到null與undefined區別,回的不是很滿意,查閱一些資料作了簡要複習記錄,有不足和錯望各位指正面試

先從兩者進行簡要認識查閱記錄起:瀏覽器

undefined可能會出現地方

1,變量申明但未賦值函數

var name
console.log(name)  // undefined
name返回undefind 由於name未賦有效值也未被使用過,始終處於原始狀態

2,函數定義了行參prototype

function test(name){
    console.log(name) // undefined
}
test()

因爲test定義了參數,但在執行test時候並未傳參,致使name參數就是原始,爲賦值的變量

3,對象Object.不存在的變量code

console.log(Object.name) // undefined

之前我一直覺得Object是簡單的對象,結果今天(2020-4-10)打開瀏覽器控制檯
console.log(Object)
結果是這樣的:ƒ Object() { [native code] } 即便:function Object() { [native code] }
又是一臉懵逼,難道說Object原型是Function??? 

Function.prototype.name = function(){}
for(var i in Objetc){
    console.log(i) // 輸出了read
}

緊接着查閱了了MDN上的資料 [MDN關於Object][1]

Object 構造函數爲給定值建立一個對象包裝器。若是給定值是 null 或 undefined,將會建立並返回一個空對象,不然,將返回一個與給定值對應類型的對象。

當以非構造函數形式被調用時,Object 等同於 new Object()。

此處查閱了MDN Object對象

4,使用void對錶達式求值 void是運算符ip

void 0 或者 void(0)// undefined

void false // undefined

void [] // undefined

注:ECMAScript 規範 void 運算符 對給定的表達式進行求值,返回都是 undefined

最終可說明一點,undefind是來自某個表達式最原始的狀態值,並不是人爲操做而得內存

undefined類型只有一個值,即undefined。當聲明的變量還未被初始化時,變量的默認值爲undefined

null 可能會出現的狀況

字面意思就是沒有值,null是JavaScript裏面的關鍵字,表示沒有值或者不存在任何值
即:在內存裏的表示就是,棧中的變量沒有指向堆中的內存對象get

var test = null  
console.log(test) //null

能夠經過 Object.prototype.toString.call(null)  // "[object Null]"
null是一個有效不存在值的對象

一個對象或者被賦值爲null時,原來的對象在內存中就是一個找不到家的孩紙,垃圾回收會在某個時機收回該對象並釋放內存。全部若是須要釋放某個對象或者變量就簡單賦值爲null原型

總結:

null與undefined區別

1,類型不一樣

console.log(typeof null) // object
console.log(typeof undefined) // undefined

// 可經過如下或者各自真實類型
Object.prototype.toString.call(null) // "[object Null]"

Object.prototype.toString.call(undefined) // "[object Undefined]"
null是一個有效不存在值的對象,而且是不可改變的,undefined的對象類型是自己未定義最初狀態值
小細節
變量等於null小栗子
var test = null
console.log(test*10) // 0

變量等於undefined小栗子
var test
console.log(test*10) // NaN

從上兩小栗子可得出:
任何具備null值的變量算術運算(+,-,*,/)都會產生整數值,而任何具備undefined值的變量算術運算(+,-,*,/)會致使變量爲NaN

2,轉換爲原始類型的方式不一樣

null與undefined轉換類型不一樣,null在算術運算轉換時會轉爲數字類型0,而undefined則不會執行任何轉換即最終爲NaN

null ---> 0
undefined ---> NaN

null轉爲0

var _null = 10 + null
console.log(_null) // 10

undefined 添加到數字則不轉換

var _und = 10 + undefined
console.log(_und) // NaN

複習小記,有錯望各位大佬指正,建議改進

相關文章
相關標籤/搜索