iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Modern Web

想轉職的鯊魚從零基礎開始學習JavaScript系列 第 7

想轉職的鯊魚從零基礎開始學習JavaScript Day-07 null、undefined及symbol

  • 分享至 

  • xImage
  •  

null

null這型別只有一個值就是null

那null是什麼,從字面上來說null是無效的;無價值的意思

ECMAScript是這麼解釋的

primitive value that represents the intentional absence of any object value
null是一個primitive,是一個刻意留空的值

另外wiki-Null pointer對null是這樣敘述的

A null pointer or null reference is a value saved for indicating that the pointer or reference does not refer to a valid object.
null代表一個值,這個值指向一個無效的對象

鯊魚依據上面兩段話,得出一個結論

有一個值他叫做null,只是這個值裡面沒有任何東西,因此他不屬於其他型別

為此他獨立於其他型別之外,自己成為一個型別那就是null

undefined

undefined這型別也只有一個值就是undefined

undefined從字面上來說是未定義的

ECMAScript是這麼解釋的

primitive value used when a variable has not been assigned a value
undefined是一個primitive,是還沒被賦予內容的值

ECMAScript說的沒錯只是MDN說的比較完善MDN-undefined

undefined is a primitive value automatically assigned to variables that have just been declared, or to formal arguments for which there are no actual arguments.
一個值只要被宣告之後就會先被自動賦予一個值undefined,或是沒有指向一個實際的值就會先回傳undefined

或許你這樣看還是一知半解,不過她有舉出很明確的例子讓你實作

宣告一個變數然後沒有賦予他值

let b
//undefined

此時就會很明確地給予變數b一個值undefined

另外沒有指向實際的值是什麼狀況,我們看看下面的例子

let c =[1,2,3]; // 宣告一個變數c並給予她一個陣列
c[0]
// 1 回傳陣列的第一個值 
c[1]
// 2 回傳陣列的第二個值
c[2]
// 3 回傳陣列的第三個值
c[3]
// undefined 應該要回傳陣列的第四個值
// 但是這個陣列沒有第四個值所以是指向一個沒有東西的地方
// 所以會回傳undefined

感覺跟null很像,但是其實差很遠

null是一個值,一個很明確告訴你這個值是沒有東西的

也就是沒有東西

undefined雖然也是一個值,但是他只是現在還沒有被定義/賦值

也就是現在還沒給他值(以後會不會給不知道)

symbol

symbol是一個很微妙的型別

依據ECMAScript是這麼解釋的

primitive value that represents a unique, non-String Object property key
他是一個primitive,代表一個獨特、非字串的物體

也就是說可以透過Symbol創造出獨一無二的值

看看下面演示

Symbol("shark") === Symbol("shark")
// false

雖然他們都是shark但是透過Symbol就創造出獨一無二的shark

看起來相似但是已經是完全不同的東西了

Symbol是一種擴充語言機制,主要運用在ES6新增的for/of迴圈或是

可迭代物件(iterable objectsg)上面

因為標準化的特定字串名稱會破壞原本的程式碼

所以才使用Symbol的方式來保護程式碼不被破壞

結語

JavaScript有八種型別,分別由七種Primitive跟一個Object組成

雖然可以用typeof 窺探她的真身,不過還是有一些特例(typeof null會回傳object 而不是null)

乍看之下七種Primitive雖然很多,但是多嘗試多運用,

就能漸漸的熟悉他們的特性,在運用上也越得心應手。

Imgur

參考資料

MDN-null
ECMAScript Language Specification
wiki-Null pointer
MDN-undefined
MDN-Symbol


上一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-06 number、bigint與boolean
下一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-08 Object types 與 Gobal object
系列文
想轉職的鯊魚從零基礎開始學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言