iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Modern Web

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

想轉職的鯊魚從零基礎開始學習JavaScript Day-17 The Global Object (全域物件)

  • 分享至 

  • xImage
  •  

前言

先前在做其他主題的之後,都會碰到Constructor Properties,建構式也就是它們的原型,這些原型從哪來的,讓我相當的好奇,所以好奇的鯊魚就去了解一下這些原型從何而來了,也順便介紹一下Global Object(全域物件)。

鯊魚好奇

概述

The Global Object (全域物件)是什麼,

他是一個執行環境,再任何code執行之前就會被建立好。

也就是JavaScript的預設環境,裡面有很多預設的Properties

沒有建構式,不能用new來建立一個新的Global Object

也沒辦法透過function去呼叫他

所以有的屬性都是由瀏覽器環境決定,不過現今瀏覽器差異不大

所以這個差異也越來越小。

The Global Object (全域物件)內可分為四類

  • Value Properties 值
  • Function Properties 函式
  • Constructor Properties 建構式
  • Other Properties 其他

Value Properties of the Global Object(全域物件的值)

  • globalThis
    全域物件的本體,如果是瀏覽器就是window
  • Infinity
    數字型別的無限
  • NaN
    數字型別Not a Number
  • undefined
    基本型別的undefined未定義

Function Properties of the Global Object(函式)

  • eval ( x )
    用字串去執行JavaScript,但是有極大的風險,因為它會調用使用者權限去執行代碼,如果遭人惡意使用,會再自身的網頁/計算機運行惡意代碼,被窺視一些私人訊息。

  • isFinite ( number )
    檢驗number是否為無限,並用Boolean值回傳。

  • isNaN ( number )
    檢驗NaN是否為無限,並用Boolean值回傳。
    因為NaN的特性 NaN 不等於任何東西,包含他自己,所以需要一個Function去檢驗NaN。
    跟Number.isNaN ( number )一樣

  • parseFloat ( string )
    跟**Number.parseFloat ( string )**一樣
    將字串轉成數字,比較特別是當字串是數字+其他非數字的組合,會將數字提出,非數字的部分捨棄(數字一定要在前面),如果不能轉換則會回傳false。

  • parseInt ( string, radix )
    跟**Number.parseInt ( string, radix )**一樣
    將string轉換成10進位的整數,radix表示string使用的進位,沒有則視為10進位。

  • URI Handling Functions
    URI(Uniform Resource Identifiers統一資源標識符)是標識資源(例如網頁或文件)和在 Internet 上訪問它們的傳輸協議(例如 HTTP 或 FTP)的字符串。
    除了幾個特定函式之外,ECMAScript language本身是不會處理URI的內容。
    decodeURI ( encodedURI )
    decodeURIComponent ( encodedURIComponent )
    encodeURI ( uri )
    encodeURIComponent ( uriComponent )

Constructor Properties of the Global Object(建構式)

這些建構式,就是物件的原型,每個物件他背後的所有屬性,都是先在全域中建立好的,當我們建立一個新物件,就會繼承這些原型的內容,所以我們才能使用這些物件屬性,也就是MDN提到的Properties跟Methods,而這些原型也包含了基本型別的原型,當基本型別要使用這些Properties時,就會自動Object()物件化。
其中包含了下面的40多種,一些常用的會在日後拉出來個別做說明。

  • AggregateError ( . . . )
  • Array ( . . . )
  • ArrayBuffer ( . . . )
  • BigInt ( . . . )
  • BigInt64Array ( . . . )
  • BigUint64Array ( . . . )
  • Boolean ( . . . )
  • DataView ( . . . )
  • Date ( . . . )
  • Error ( . . . )
  • EvalError ( . . . )
  • FinalizationRegistry ( . . . )
  • Float32Array ( . . . )
  • Float64Array ( . . . )
  • Function ( . . . )
  • Int8Array ( . . . )
  • Int16Array ( . . . )
  • Int32Array ( . . . )
  • Map ( . . . )
  • Number ( . . . )
  • Object ( . . . )
  • Promise ( . . . )
  • Proxy ( . . . )
  • RangeError ( . . . )
  • ReferenceError ( . . . )
  • RegExp ( . . . )
  • Set ( . . . )
  • SharedArrayBuffer ( . . . )
  • String ( . . . )
  • Symbol ( . . . )
  • SyntaxError ( . . . )
  • TypeError ( . . . )
  • Uint8Array ( . . . )
  • Uint8ClampedArray ( . . . )
  • Uint16Array ( . . . )
  • Uint32Array ( . . . )
  • URIError ( . . . )
  • WeakMap ( . . . )
  • WeakRef ( . . . )
  • WeakSet ( . . . )

Other Properties of the Global Object

大部分的類別,都有一個Constructor Properties規範他們的基礎行動與運作,
但是有部分的類別,沒有Constructor Properties原型的,就是下面四種,這四種也都是靜態型別,我對它們的理解如下。

  • Atomics
    規範原子運作的。
  • JSON
    跟物件很類似,但是能使用的內容卻比物件狹隘很多
  • Math
    主要是對數字的運作,但是卻不屬於Number裡面的。
  • Reflect
    另類使用函式的方式。

結語

越是介紹到後面的東西,就越會發現自己少了些什麼,這時鯊魚就來亡羊補牢了,希望不會太晚。

參考資料

EMCA262
MDN-Reflect
MDN-Atomics
MDN-parse


上一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-16 The Number Type數字(二)
下一篇
想轉職的鯊魚從零基礎開始學習JavaScript Day-18 Fundamental Objects(一)-Object Objects (名為物件的物件)
系列文
想轉職的鯊魚從零基礎開始學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言