Global
在 JavaScript 中什么是全局對象?
- 簡單來說,在 JavaScript 中,有那么一個對象,它的所有屬性可以在程序中的任何地方調用、訪問,並且所有在全局創建的變量常量都會綁定在這個對象上,那么這一個對象就是全局對象。
- 全局對象只是一個對象,它不是類,它沒有構造函數,也無法實例化一個新的全局對象,在一個程序中有且只有一個全局對象。
- 真實的全局對象是不可以被直接訪問的,通過關鍵字可以引用全局對象,被引用的是全局對象的代理,雖然真實全局對象和全局對象代理有所區別,但在平時使用中,可以直接把引用的全局對象代理當作真實的全局對象使用。
- 在瀏覽器環境中,JavaScript 的全局對象就是 Window 對象。在瀏覽器中運行 JavaScript ,全局對象會和 window 對象結合,相當全局對象於寄生 window 對象,可以通過 window 對象訪問全局對象的所有屬性。
- 在node.js 環境中,JavaScript 的全局對象是 Global 對象。在 node.js 環境中,可以通過 global 對象訪問全局對象的所有屬性。
- 其他環境,比如微信小程序等環境,這種也可以看作一個瀏覽器,不過這個瀏覽器通過刪減一些不用的屬性再添加或修改一些自定義的屬性變成一個新的瀏覽器環境,但其核心還是沒有變化的。當然,這種瀏覽器環境的全局對象同樣也是 Window 對象。
不同 JavaScript 環境中怎么獲取全局對象?
由於在 JavaScript 中,全局對象不是任何對象的屬性,它沒有自己的名稱,但在頂層 JavaScript 中,大部分情況下可以使用關鍵字 this、window 引用全局對象(node.js 環境中不可以,其宿主與瀏覽器環境不同)。
關於使用關鍵字引用全局對象,下面整理了一個表格,可以進行查看:
/* ; 下表中數據含意: ; g : 表示輸出全局對象 ; - 瀏覽器:window(含各內置對象、本地對象、BOM、DOM) ; - 小程序:window(含部分內置對象、部分本地對象、一些自定義對象、少量BOM、極少DOM) ; - node :全局對象(含各內置對象、無window、無DOM、極少極少BOM) ; n : 表示其他非全局對象的對象(node 中,全局this為空對象,准確說應該是 module.exports。函數中的this為全局對象 global) ; / : 表示輸出 not defined ---------------------------------------------------------------- ; : IE : 正常瀏覽器 : node : 小程序 ; ;--------------------------------------------------------------- ;this : g : g : n : g ; ;self : g : g : / : g ; ;window : g : g : / : g ; ;global : / : / : g : n ; ;globalTthis : / : g : g : / ; ;top : g : g : / : g ; ;parent : g : g : / : g ; ;frames : g : g : / : / ; ---------------------------------------------------------------- */
各瀏覽器中全局對象的屬性數量:
通過測試,得到市面上比較流行的瀏覽器在空頁面時全局對象的屬性的數量(大概數量,同樣瀏覽器不同版本都會有所不同):
常見瀏覽器:
- google:960+
- opera:950+
- firefox:810+
- safari:760+
- 360:920+
- edge:670+
- ie-11:470+
- ie-10:410+
- ie-9:320+
其他 Javascript 環境:
- 微信小程序:180+
- node:70+
全局對象的屬性:
由於不同環境全局對象的屬性都不盡相同,甚至同一個環境不同版本的全局對象屬性都有不同,下面主要列出 google 瀏覽器( 版本 83.x+) 和 node.js( 版本 14.x+)的全局對象所有屬性:
瀏覽器中的全局對象的屬性:

// google 瀏覽器中的 Object.getOwnPropertyDescriptors(globalThis) Infinity: {value: Infinity, writable: false, enumerable: false, configurable: false} $: {writable: true, enumerable: false, configurable: true, value: ƒ} $0: {value: undefined, writable: true, enumerable: false, configurable: true} $1: {value: undefined, writable: true, enumerable: false, configurable: true} $2: {value: undefined, writable: true, enumerable: false, configurable: true} $3: {value: undefined, writable: true, enumerable: false, configurable: true} $4: {value: undefined, writable: true, enumerable: false, configurable: true} $$: {writable: true, enumerable: false, configurable: true, value: ƒ} $_: {value: undefined, writable: true, enumerable: false, configurable: true} $x: {writable: true, enumerable: false, configurable: true, value: ƒ} AbortController: {writable: true, enumerable: false, configurable: true, value: ƒ} AbortSignal: {writable: true, enumerable: false, configurable: true, value: ƒ} AbsoluteOrientationSensor: {writable: true, enumerable: false, configurable: true, value: ƒ} Accelerometer: {writable: true, enumerable: false, configurable: true, value: ƒ} AnalyserNode: {writable: true, enumerable: false, configurable: true, value: ƒ} Animation: {writable: true, enumerable: false, configurable: true, value: ƒ} AnimationEffect: {writable: true, enumerable: false, configurable: true, value: ƒ} AnimationEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} ApplicationCache: {writable: true, enumerable: false, configurable: true, value: ƒ} ApplicationCacheErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Array: {writable: true, enumerable: false, configurable: true, value: ƒ} ArrayBuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} Atomics: {value: Atomics, writable: true, enumerable: false, configurable: true} Attr: {writable: true, enumerable: false, configurable: true, value: ƒ} Audio: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioBuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioBufferSourceNode: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioContext: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioDestinationNode: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioListener: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioNode: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioParam: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioParamMap: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioProcessingEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioScheduledSourceNode: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioWorklet: {writable: true, enumerable: false, configurable: true, value: ƒ} AudioWorkletNode: {writable: true, enumerable: false, configurable: true, value: ƒ} AuthenticatorAssertionResponse: {writable: true, enumerable: false, configurable: true, value: ƒ} AuthenticatorAttestationResponse: {writable: true, enumerable: false, configurable: true, value: ƒ} AuthenticatorResponse: {writable: true, enumerable: false, configurable: true, value: ƒ} BackgroundFetchManager: {writable: true, enumerable: false, configurable: true, value: ƒ} BackgroundFetchRecord: {writable: true, enumerable: false, configurable: true, value: ƒ} BackgroundFetchRegistration: {writable: true, enumerable: false, configurable: true, value: ƒ} BarProp: {writable: true, enumerable: false, configurable: true, value: ƒ} BarcodeDetector: {writable: true, enumerable: false, configurable: true, value: ƒ} BaseAudioContext: {writable: true, enumerable: false, configurable: true, value: ƒ} BatteryManager: {writable: true, enumerable: false, configurable: true, value: ƒ} BeforeInstallPromptEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} BeforeUnloadEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} BigInt: {writable: true, enumerable: false, configurable: true, value: ƒ} BigInt64Array: {writable: true, enumerable: false, configurable: true, value: ƒ} BigUint64Array: {writable: true, enumerable: false, configurable: true, value: ƒ} BiquadFilterNode: {writable: true, enumerable: false, configurable: true, value: ƒ} Blob: {writable: true, enumerable: false, configurable: true, value: ƒ} BlobEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Bluetooth: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothCharacteristicProperties: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothDevice: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothRemoteGATTCharacteristic: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothRemoteGATTDescriptor: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothRemoteGATTServer: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothRemoteGATTService: {writable: true, enumerable: false, configurable: true, value: ƒ} BluetoothUUID: {writable: true, enumerable: false, configurable: true, value: ƒ} Boolean: {writable: true, enumerable: false, configurable: true, value: ƒ} BroadcastChannel: {writable: true, enumerable: false, configurable: true, value: ƒ} ByteLengthQueuingStrategy: {writable: true, enumerable: false, configurable: true, value: ƒ} CDATASection: {writable: true, enumerable: false, configurable: true, value: ƒ} CSS: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSConditionRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSFontFaceRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSGroupingRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSImageValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSImportRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSKeyframeRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSKeyframesRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSKeywordValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathInvert: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathMax: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathMin: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathNegate: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathProduct: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathSum: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMathValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMatrixComponent: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSMediaRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSNamespaceRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSNumericArray: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSNumericValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSPageRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSPerspective: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSPositionValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSRotate: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSRuleList: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSScale: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSSkew: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSSkewX: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSSkewY: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSStyleDeclaration: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSStyleRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSStyleSheet: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSStyleValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSSupportsRule: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSTransformComponent: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSTransformValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSTranslate: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSUnitValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSUnparsedValue: {writable: true, enumerable: false, configurable: true, value: ƒ} CSSVariableReferenceValue: {writable: true, enumerable: false, configurable: true, value: ƒ} Cache: {writable: true, enumerable: false, configurable: true, value: ƒ} CacheStorage: {writable: true, enumerable: false, configurable: true, value: ƒ} CanvasCaptureMediaStreamTrack: {writable: true, enumerable: false, configurable: true, value: ƒ} CanvasGradient: {writable: true, enumerable: false, configurable: true, value: ƒ} CanvasPattern: {writable: true, enumerable: false, configurable: true, value: ƒ} CanvasRenderingContext2D: {writable: true, enumerable: false, configurable: true, value: ƒ} ChannelMergerNode: {writable: true, enumerable: false, configurable: true, value: ƒ} ChannelSplitterNode: {writable: true, enumerable: false, configurable: true, value: ƒ} CharacterData: {writable: true, enumerable: false, configurable: true, value: ƒ} Clipboard: {writable: true, enumerable: false, configurable: true, value: ƒ} ClipboardEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} ClipboardItem: {writable: true, enumerable: false, configurable: true, value: ƒ} CloseEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Comment: {writable: true, enumerable: false, configurable: true, value: ƒ} CompositionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} CompressionStream: {writable: true, enumerable: false, configurable: true, value: ƒ} ConstantSourceNode: {writable: true, enumerable: false, configurable: true, value: ƒ} ConvolverNode: {writable: true, enumerable: false, configurable: true, value: ƒ} CountQueuingStrategy: {writable: true, enumerable: false, configurable: true, value: ƒ} Credential: {writable: true, enumerable: false, configurable: true, value: ƒ} CredentialsContainer: {writable: true, enumerable: false, configurable: true, value: ƒ} Crypto: {writable: true, enumerable: false, configurable: true, value: ƒ} CryptoKey: {writable: true, enumerable: false, configurable: true, value: ƒ} CustomElementRegistry: {writable: true, enumerable: false, configurable: true, value: ƒ} CustomEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMError: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMException: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMImplementation: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMMatrix: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMMatrixReadOnly: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMParser: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMPoint: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMPointReadOnly: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMQuad: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMRect: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMRectList: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMRectReadOnly: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMStringList: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMStringMap: {writable: true, enumerable: false, configurable: true, value: ƒ} DOMTokenList: {writable: true, enumerable: false, configurable: true, value: ƒ} DataTransfer: {writable: true, enumerable: false, configurable: true, value: ƒ} DataTransferItem: {writable: true, enumerable: false, configurable: true, value: ƒ} DataTransferItemList: {writable: true, enumerable: false, configurable: true, value: ƒ} DataView: {writable: true, enumerable: false, configurable: true, value: ƒ} Date: {writable: true, enumerable: false, configurable: true, value: ƒ} DecompressionStream: {writable: true, enumerable: false, configurable: true, value: ƒ} DelayNode: {writable: true, enumerable: false, configurable: true, value: ƒ} DeviceMotionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} DeviceMotionEventAcceleration: {writable: true, enumerable: false, configurable: true, value: ƒ} DeviceMotionEventRotationRate: {writable: true, enumerable: false, configurable: true, value: ƒ} DeviceOrientationEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Document: {writable: true, enumerable: false, configurable: true, value: ƒ} DocumentFragment: {writable: true, enumerable: false, configurable: true, value: ƒ} DocumentType: {writable: true, enumerable: false, configurable: true, value: ƒ} DragEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} DynamicsCompressorNode: {writable: true, enumerable: false, configurable: true, value: ƒ} Element: {writable: true, enumerable: false, configurable: true, value: ƒ} ElementInternals: {writable: true, enumerable: false, configurable: true, value: ƒ} EnterPictureInPictureEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Error: {writable: true, enumerable: false, configurable: true, value: ƒ} ErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} EvalError: {writable: true, enumerable: false, configurable: true, value: ƒ} Event: {writable: true, enumerable: false, configurable: true, value: ƒ} EventSource: {writable: true, enumerable: false, configurable: true, value: ƒ} EventTarget: {writable: true, enumerable: false, configurable: true, value: ƒ} External: {writable: true, enumerable: false, configurable: true, value: ƒ} FeaturePolicy: {writable: true, enumerable: false, configurable: true, value: ƒ} FederatedCredential: {writable: true, enumerable: false, configurable: true, value: ƒ} File: {writable: true, enumerable: false, configurable: true, value: ƒ} FileList: {writable: true, enumerable: false, configurable: true, value: ƒ} FileReader: {writable: true, enumerable: false, configurable: true, value: ƒ} Float32Array: {writable: true, enumerable: false, configurable: true, value: ƒ} Float64Array: {writable: true, enumerable: false, configurable: true, value: ƒ} FocusEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} FontFace: {writable: true, enumerable: false, configurable: true, value: ƒ} FontFaceSetLoadEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} FormData: {writable: true, enumerable: false, configurable: true, value: ƒ} FormDataEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} FragmentDirective: {writable: true, enumerable: false, configurable: true, value: ƒ} Function: {writable: true, enumerable: false, configurable: true, value: ƒ} GainNode: {writable: true, enumerable: false, configurable: true, value: ƒ} Gamepad: {writable: true, enumerable: false, configurable: true, value: ƒ} GamepadButton: {writable: true, enumerable: false, configurable: true, value: ƒ} GamepadEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} GamepadHapticActuator: {writable: true, enumerable: false, configurable: true, value: ƒ} Geolocation: {writable: true, enumerable: false, configurable: true, value: ƒ} GeolocationCoordinates: {writable: true, enumerable: false, configurable: true, value: ƒ} GeolocationPosition: {writable: true, enumerable: false, configurable: true, value: ƒ} GeolocationPositionError: {writable: true, enumerable: false, configurable: true, value: ƒ} Gyroscope: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLAllCollection: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLAnchorElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLAreaElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLAudioElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLBRElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLBaseElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLBodyElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLButtonElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLCanvasElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLCollection: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLContentElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDListElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDataElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDataListElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDetailsElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDialogElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDirectoryElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDivElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLDocument: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLEmbedElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFieldSetElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFontElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFormControlsCollection: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFormElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFrameElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLFrameSetElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLHRElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLHeadElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLHeadingElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLHtmlElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLIFrameElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLImageElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLInputElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLLIElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLLabelElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLLegendElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLLinkElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMapElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMarqueeElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMediaElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMenuElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMetaElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLMeterElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLModElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLOListElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLObjectElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLOptGroupElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLOptionElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLOptionsCollection: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLOutputElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLParagraphElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLParamElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLPictureElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLPreElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLProgressElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLQuoteElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLScriptElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLSelectElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLShadowElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLSlotElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLSourceElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLSpanElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLStyleElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableCaptionElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableCellElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableColElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableRowElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTableSectionElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTemplateElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTextAreaElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTimeElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTitleElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLTrackElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLUListElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLUnknownElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HTMLVideoElement: {writable: true, enumerable: false, configurable: true, value: ƒ} HashChangeEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Headers: {writable: true, enumerable: false, configurable: true, value: ƒ} History: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBCursor: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBCursorWithValue: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBDatabase: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBFactory: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBIndex: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBKeyRange: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBObjectStore: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBOpenDBRequest: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBRequest: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBTransaction: {writable: true, enumerable: false, configurable: true, value: ƒ} IDBVersionChangeEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} IIRFilterNode: {writable: true, enumerable: false, configurable: true, value: ƒ} IdleDeadline: {writable: true, enumerable: false, configurable: true, value: ƒ} Image: {writable: true, enumerable: false, configurable: true, value: ƒ} ImageBitmap: {writable: true, enumerable: false, configurable: true, value: ƒ} ImageBitmapRenderingContext: {writable: true, enumerable: false, configurable: true, value: ƒ} ImageCapture: {writable: true, enumerable: false, configurable: true, value: ƒ} ImageData: {writable: true, enumerable: false, configurable: true, value: ƒ} InputDeviceCapabilities: {writable: true, enumerable: false, configurable: true, value: ƒ} InputDeviceInfo: {writable: true, enumerable: false, configurable: true, value: ƒ} InputEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Int8Array: {writable: true, enumerable: false, configurable: true, value: ƒ} Int16Array: {writable: true, enumerable: false, configurable: true, value: ƒ} Int32Array: {writable: true, enumerable: false, configurable: true, value: ƒ} IntersectionObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} IntersectionObserverEntry: {writable: true, enumerable: false, configurable: true, value: ƒ} Intl: {value: {…}, writable: true, enumerable: false, configurable: true} JSON: {value: JSON, writable: true, enumerable: false, configurable: true} Keyboard: {writable: true, enumerable: false, configurable: true, value: ƒ} KeyboardEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} KeyboardLayoutMap: {writable: true, enumerable: false, configurable: true, value: ƒ} KeyframeEffect: {writable: true, enumerable: false, configurable: true, value: ƒ} LargestContentfulPaint: {writable: true, enumerable: false, configurable: true, value: ƒ} LayoutShift: {writable: true, enumerable: false, configurable: true, value: ƒ} LinearAccelerationSensor: {writable: true, enumerable: false, configurable: true, value: ƒ} Location: {writable: true, enumerable: false, configurable: true, value: ƒ} Lock: {writable: true, enumerable: false, configurable: true, value: ƒ} LockManager: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIAccess: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIConnectionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIInput: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIInputMap: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIMessageEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIOutput: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIOutputMap: {writable: true, enumerable: false, configurable: true, value: ƒ} MIDIPort: {writable: true, enumerable: false, configurable: true, value: ƒ} Map: {writable: true, enumerable: false, configurable: true, value: ƒ} Math: {value: Math, writable: true, enumerable: false, configurable: true} MediaCapabilities: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaDeviceInfo: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaDevices: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaElementAudioSourceNode: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaEncryptedEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaError: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaKeyMessageEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaKeySession: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaKeyStatusMap: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaKeySystemAccess: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaKeys: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaList: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaMetadata: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaQueryList: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaQueryListEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaRecorder: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaSession: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaSettingsRange: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaSource: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStream: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStreamAudioDestinationNode: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStreamAudioSourceNode: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStreamEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStreamTrack: {writable: true, enumerable: false, configurable: true, value: ƒ} MediaStreamTrackEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MessageChannel: {writable: true, enumerable: false, configurable: true, value: ƒ} MessageEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MessagePort: {writable: true, enumerable: false, configurable: true, value: ƒ} MimeType: {writable: true, enumerable: false, configurable: true, value: ƒ} MimeTypeArray: {writable: true, enumerable: false, configurable: true, value: ƒ} MouseEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MutationEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} MutationObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} MutationRecord: {writable: true, enumerable: false, configurable: true, value: ƒ} NaN: {value: NaN, writable: false, enumerable: false, configurable: false} NamedNodeMap: {writable: true, enumerable: false, configurable: true, value: ƒ} NavigationPreloadManager: {writable: true, enumerable: false, configurable: true, value: ƒ} Navigator: {writable: true, enumerable: false, configurable: true, value: ƒ} NetworkInformation: {writable: true, enumerable: false, configurable: true, value: ƒ} Node: {writable: true, enumerable: false, configurable: true, value: ƒ} NodeFilter: {writable: true, enumerable: false, configurable: true, value: ƒ} NodeIterator: {writable: true, enumerable: false, configurable: true, value: ƒ} NodeList: {writable: true, enumerable: false, configurable: true, value: ƒ} Notification: {writable: true, enumerable: false, configurable: true, value: ƒ} Number: {writable: true, enumerable: false, configurable: true, value: ƒ} Object: {writable: true, enumerable: false, configurable: true, value: ƒ} OfflineAudioCompletionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} OfflineAudioContext: {writable: true, enumerable: false, configurable: true, value: ƒ} OffscreenCanvas: {writable: true, enumerable: false, configurable: true, value: ƒ} OffscreenCanvasRenderingContext2D: {writable: true, enumerable: false, configurable: true, value: ƒ} Option: {writable: true, enumerable: false, configurable: true, value: ƒ} OrientationSensor: {writable: true, enumerable: false, configurable: true, value: ƒ} OscillatorNode: {writable: true, enumerable: false, configurable: true, value: ƒ} OverconstrainedError: {writable: true, enumerable: false, configurable: true, value: ƒ} PageTransitionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PannerNode: {writable: true, enumerable: false, configurable: true, value: ƒ} PasswordCredential: {writable: true, enumerable: false, configurable: true, value: ƒ} Path2D: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentAddress: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentInstruments: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentManager: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentMethodChangeEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentRequest: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentRequestUpdateEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PaymentResponse: {writable: true, enumerable: false, configurable: true, value: ƒ} Performance: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceElementTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceEntry: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceEventTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceLongTaskTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceMark: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceMeasure: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceNavigation: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceNavigationTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceObserverEntryList: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformancePaintTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceResourceTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceServerTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PerformanceTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} PeriodicSyncManager: {writable: true, enumerable: false, configurable: true, value: ƒ} PeriodicWave: {writable: true, enumerable: false, configurable: true, value: ƒ} PermissionStatus: {writable: true, enumerable: false, configurable: true, value: ƒ} Permissions: {writable: true, enumerable: false, configurable: true, value: ƒ} PhotoCapabilities: {writable: true, enumerable: false, configurable: true, value: ƒ} PictureInPictureWindow: {writable: true, enumerable: false, configurable: true, value: ƒ} Plugin: {writable: true, enumerable: false, configurable: true, value: ƒ} PluginArray: {writable: true, enumerable: false, configurable: true, value: ƒ} PointerEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PopStateEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Presentation: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationAvailability: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationConnection: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationConnectionAvailableEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationConnectionCloseEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationConnectionList: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationReceiver: {writable: true, enumerable: false, configurable: true, value: ƒ} PresentationRequest: {writable: true, enumerable: false, configurable: true, value: ƒ} ProcessingInstruction: {writable: true, enumerable: false, configurable: true, value: ƒ} ProgressEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Promise: {writable: true, enumerable: false, configurable: true, value: ƒ} PromiseRejectionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Proxy: {writable: true, enumerable: false, configurable: true, value: ƒ} PublicKeyCredential: {writable: true, enumerable: false, configurable: true, value: ƒ} PushManager: {writable: true, enumerable: false, configurable: true, value: ƒ} PushSubscription: {writable: true, enumerable: false, configurable: true, value: ƒ} PushSubscriptionOptions: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCCertificate: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCDTMFSender: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCDTMFToneChangeEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCDataChannel: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCDataChannelEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCDtlsTransport: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCError: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCIceCandidate: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCIceTransport: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCPeerConnection: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCPeerConnectionIceErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCPeerConnectionIceEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCRtpReceiver: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCRtpSender: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCRtpTransceiver: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCSctpTransport: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCSessionDescription: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCStatsReport: {writable: true, enumerable: false, configurable: true, value: ƒ} RTCTrackEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} RadioNodeList: {writable: true, enumerable: false, configurable: true, value: ƒ} Range: {writable: true, enumerable: false, configurable: true, value: ƒ} RangeError: {writable: true, enumerable: false, configurable: true, value: ƒ} ReadableStream: {writable: true, enumerable: false, configurable: true, value: ƒ} ReadableStreamDefaultReader: {writable: true, enumerable: false, configurable: true, value: ƒ} ReferenceError: {writable: true, enumerable: false, configurable: true, value: ƒ} Reflect: {value: {…}, writable: true, enumerable: false, configurable: true} RegExp: {writable: true, enumerable: false, configurable: true, value: ƒ} RelativeOrientationSensor: {writable: true, enumerable: false, configurable: true, value: ƒ} RemotePlayback: {writable: true, enumerable: false, configurable: true, value: ƒ} ReportingObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} Request: {writable: true, enumerable: false, configurable: true, value: ƒ} ResizeObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} ResizeObserverEntry: {writable: true, enumerable: false, configurable: true, value: ƒ} Response: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAngle: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimateElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimateMotionElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimateTransformElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedAngle: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedBoolean: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedEnumeration: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedInteger: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedLength: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedLengthList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedNumber: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedNumberList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedPreserveAspectRatio: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedRect: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedString: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimatedTransformList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGAnimationElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGCircleElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGClipPathElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGComponentTransferFunctionElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGDefsElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGDescElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGEllipseElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEBlendElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEColorMatrixElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEComponentTransferElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFECompositeElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEConvolveMatrixElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEDiffuseLightingElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEDisplacementMapElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEDistantLightElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEDropShadowElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEFloodElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEFuncAElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEFuncBElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEFuncGElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEFuncRElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEGaussianBlurElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEImageElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEMergeElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEMergeNodeElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEMorphologyElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEOffsetElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFEPointLightElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFESpecularLightingElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFESpotLightElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFETileElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFETurbulenceElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGFilterElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGForeignObjectElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGGElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGGeometryElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGGradientElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGGraphicsElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGImageElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGLength: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGLengthList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGLineElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGLinearGradientElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGMPathElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGMarkerElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGMaskElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGMatrix: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGMetadataElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGNumber: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGNumberList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPathElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPatternElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPoint: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPointList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPolygonElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPolylineElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGPreserveAspectRatio: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGRadialGradientElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGRect: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGRectElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGSVGElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGScriptElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGSetElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGStopElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGStringList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGStyleElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGSwitchElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGSymbolElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTSpanElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTextContentElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTextElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTextPathElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTextPositioningElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTitleElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTransform: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGTransformList: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGUnitTypes: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGUseElement: {writable: true, enumerable: false, configurable: true, value: ƒ} SVGViewElement: {writable: true, enumerable: false, configurable: true, value: ƒ} Screen: {writable: true, enumerable: false, configurable: true, value: ƒ} ScreenOrientation: {writable: true, enumerable: false, configurable: true, value: ƒ} ScriptProcessorNode: {writable: true, enumerable: false, configurable: true, value: ƒ} SecurityPolicyViolationEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Selection: {writable: true, enumerable: false, configurable: true, value: ƒ} Sensor: {writable: true, enumerable: false, configurable: true, value: ƒ} SensorErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} ServiceWorker: {writable: true, enumerable: false, configurable: true, value: ƒ} ServiceWorkerContainer: {writable: true, enumerable: false, configurable: true, value: ƒ} ServiceWorkerRegistration: {writable: true, enumerable: false, configurable: true, value: ƒ} Set: {writable: true, enumerable: false, configurable: true, value: ƒ} ShadowRoot: {writable: true, enumerable: false, configurable: true, value: ƒ} SharedArrayBuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} SharedWorker: {writable: true, enumerable: false, configurable: true, value: ƒ} SourceBuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} SourceBufferList: {writable: true, enumerable: false, configurable: true, value: ƒ} SpeechSynthesisErrorEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} SpeechSynthesisEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} SpeechSynthesisUtterance: {writable: true, enumerable: false, configurable: true, value: ƒ} StaticRange: {writable: true, enumerable: false, configurable: true, value: ƒ} StereoPannerNode: {writable: true, enumerable: false, configurable: true, value: ƒ} Storage: {writable: true, enumerable: false, configurable: true, value: ƒ} StorageEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} StorageManager: {writable: true, enumerable: false, configurable: true, value: ƒ} String: {writable: true, enumerable: false, configurable: true, value: ƒ} StylePropertyMap: {writable: true, enumerable: false, configurable: true, value: ƒ} StylePropertyMapReadOnly: {writable: true, enumerable: false, configurable: true, value: ƒ} StyleSheet: {writable: true, enumerable: false, configurable: true, value: ƒ} StyleSheetList: {writable: true, enumerable: false, configurable: true, value: ƒ} SubmitEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} SubtleCrypto: {writable: true, enumerable: false, configurable: true, value: ƒ} Symbol: {writable: true, enumerable: false, configurable: true, value: ƒ} SyncManager: {writable: true, enumerable: false, configurable: true, value: ƒ} SyntaxError: {writable: true, enumerable: false, configurable: true, value: ƒ} TaskAttributionTiming: {writable: true, enumerable: false, configurable: true, value: ƒ} Text: {writable: true, enumerable: false, configurable: true, value: ƒ} TextDecoder: {writable: true, enumerable: false, configurable: true, value: ƒ} TextDecoderStream: {writable: true, enumerable: false, configurable: true, value: ƒ} TextEncoder: {writable: true, enumerable: false, configurable: true, value: ƒ} TextEncoderStream: {writable: true, enumerable: false, configurable: true, value: ƒ} TextEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} TextMetrics: {writable: true, enumerable: false, configurable: true, value: ƒ} TextTrack: {writable: true, enumerable: false, configurable: true, value: ƒ} TextTrackCue: {writable: true, enumerable: false, configurable: true, value: ƒ} TextTrackCueList: {writable: true, enumerable: false, configurable: true, value: ƒ} TextTrackList: {writable: true, enumerable: false, configurable: true, value: ƒ} TimeRanges: {writable: true, enumerable: false, configurable: true, value: ƒ} Touch: {writable: true, enumerable: false, configurable: true, value: ƒ} TouchEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} TouchList: {writable: true, enumerable: false, configurable: true, value: ƒ} TrackEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} TransformStream: {writable: true, enumerable: false, configurable: true, value: ƒ} TransitionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} TreeWalker: {writable: true, enumerable: false, configurable: true, value: ƒ} TrustedHTML: {writable: true, enumerable: false, configurable: true, value: ƒ} TrustedScript: {writable: true, enumerable: false, configurable: true, value: ƒ} TrustedScriptURL: {writable: true, enumerable: false, configurable: true, value: ƒ} TrustedTypePolicy: {writable: true, enumerable: false, configurable: true, value: ƒ} TrustedTypePolicyFactory: {writable: true, enumerable: false, configurable: true, value: ƒ} TypeError: {writable: true, enumerable: false, configurable: true, value: ƒ} UIEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} URIError: {writable: true, enumerable: false, configurable: true, value: ƒ} URL: {writable: true, enumerable: false, configurable: true, value: ƒ} URLSearchParams: {writable: true, enumerable: false, configurable: true, value: ƒ} USB: {writable: true, enumerable: false, configurable: true, value: ƒ} USBAlternateInterface: {writable: true, enumerable: false, configurable: true, value: ƒ} USBConfiguration: {writable: true, enumerable: false, configurable: true, value: ƒ} USBConnectionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} USBDevice: {writable: true, enumerable: false, configurable: true, value: ƒ} USBEndpoint: {writable: true, enumerable: false, configurable: true, value: ƒ} USBInTransferResult: {writable: true, enumerable: false, configurable: true, value: ƒ} USBInterface: {writable: true, enumerable: false, configurable: true, value: ƒ} USBIsochronousInTransferPacket: {writable: true, enumerable: false, configurable: true, value: ƒ} USBIsochronousInTransferResult: {writable: true, enumerable: false, configurable: true, value: ƒ} USBIsochronousOutTransferPacket: {writable: true, enumerable: false, configurable: true, value: ƒ} USBIsochronousOutTransferResult: {writable: true, enumerable: false, configurable: true, value: ƒ} USBOutTransferResult: {writable: true, enumerable: false, configurable: true, value: ƒ} Uint8Array: {writable: true, enumerable: false, configurable: true, value: ƒ} Uint8ClampedArray: {writable: true, enumerable: false, configurable: true, value: ƒ} Uint16Array: {writable: true, enumerable: false, configurable: true, value: ƒ} Uint32Array: {writable: true, enumerable: false, configurable: true, value: ƒ} UserActivation: {writable: true, enumerable: false, configurable: true, value: ƒ} VTTCue: {writable: true, enumerable: false, configurable: true, value: ƒ} ValidityState: {writable: true, enumerable: false, configurable: true, value: ƒ} VideoPlaybackQuality: {writable: true, enumerable: false, configurable: true, value: ƒ} VisualViewport: {writable: true, enumerable: false, configurable: true, value: ƒ} WaveShaperNode: {writable: true, enumerable: false, configurable: true, value: ƒ} WeakMap: {writable: true, enumerable: false, configurable: true, value: ƒ} WeakSet: {writable: true, enumerable: false, configurable: true, value: ƒ} WebAssembly: {value: WebAssembly, writable: true, enumerable: false, configurable: true} WebGL2RenderingContext: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLActiveInfo: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLBuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLContextEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLFramebuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLProgram: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLQuery: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLRenderbuffer: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLRenderingContext: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLSampler: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLShader: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLShaderPrecisionFormat: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLSync: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLTexture: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLTransformFeedback: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLUniformLocation: {writable: true, enumerable: false, configurable: true, value: ƒ} WebGLVertexArrayObject: {writable: true, enumerable: false, configurable: true, value: ƒ} WebKitCSSMatrix: {writable: true, enumerable: false, configurable: true, value: ƒ} WebKitMutationObserver: {writable: true, enumerable: false, configurable: true, value: ƒ} WebSocket: {writable: true, enumerable: false, configurable: true, value: ƒ} WheelEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} Window: {writable: true, enumerable: false, configurable: true, value: ƒ} Worker: {writable: true, enumerable: false, configurable: true, value: ƒ} Worklet: {writable: true, enumerable: false, configurable: true, value: ƒ} WritableStream: {writable: true, enumerable: false, configurable: true, value: ƒ} WritableStreamDefaultWriter: {writable: true, enumerable: false, configurable: true, value: ƒ} XMLDocument: {writable: true, enumerable: false, configurable: true, value: ƒ} XMLHttpRequest: {writable: true, enumerable: false, configurable: true, value: ƒ} XMLHttpRequestEventTarget: {writable: true, enumerable: false, configurable: true, value: ƒ} XMLHttpRequestUpload: {writable: true, enumerable: false, configurable: true, value: ƒ} XMLSerializer: {writable: true, enumerable: false, configurable: true, value: ƒ} XPathEvaluator: {writable: true, enumerable: false, configurable: true, value: ƒ} XPathExpression: {writable: true, enumerable: false, configurable: true, value: ƒ} XPathResult: {writable: true, enumerable: false, configurable: true, value: ƒ} XRBoundedReferenceSpace: {writable: true, enumerable: false, configurable: true, value: ƒ} XRDOMOverlayState: {writable: true, enumerable: false, configurable: true, value: ƒ} XRFrame: {writable: true, enumerable: false, configurable: true, value: ƒ} XRHitTestResult: {writable: true, enumerable: false, configurable: true, value: ƒ} XRHitTestSource: {writable: true, enumerable: false, configurable: true, value: ƒ} XRInputSource: {writable: true, enumerable: false, configurable: true, value: ƒ} XRInputSourceArray: {writable: true, enumerable: false, configurable: true, value: ƒ} XRInputSourceEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} XRInputSourcesChangeEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} XRPose: {writable: true, enumerable: false, configurable: true, value: ƒ} XRRay: {writable: true, enumerable: false, configurable: true, value: ƒ} XRReferenceSpace: {writable: true, enumerable: false, configurable: true, value: ƒ} XRReferenceSpaceEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} XRRenderState: {writable: true, enumerable: false, configurable: true, value: ƒ} XRRigidTransform: {writable: true, enumerable: false, configurable: true, value: ƒ} XRSession: {writable: true, enumerable: false, configurable: true, value: ƒ} XRSessionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} XRSpace: {writable: true, enumerable: false, configurable: true, value: ƒ} XRSystem: {writable: true, enumerable: false, configurable: true, value: ƒ} XRTransientInputHitTestResult: {writable: true, enumerable: false, configurable: true, value: ƒ} XRTransientInputHitTestSource: {writable: true, enumerable: false, configurable: true, value: ƒ} XRView: {writable: true, enumerable: false, configurable: true, value: ƒ} XRViewerPose: {writable: true, enumerable: false, configurable: true, value: ƒ} XRViewport: {writable: true, enumerable: false, configurable: true, value: ƒ} XRWebGLLayer: {writable: true, enumerable: false, configurable: true, value: ƒ} XSLTProcessor: {writable: true, enumerable: false, configurable: true, value: ƒ} alert: {writable: true, enumerable: true, configurable: true, value: ƒ} applicationCache: {set: undefined, enumerable: true, configurable: true, get: ƒ} atob: {writable: true, enumerable: true, configurable: true, value: ƒ} blur: {writable: true, enumerable: true, configurable: true, value: ƒ} btoa: {writable: true, enumerable: true, configurable: true, value: ƒ} caches: {set: undefined, enumerable: true, configurable: true, get: ƒ} cancelAnimationFrame: {writable: true, enumerable: true, configurable: true, value: ƒ} cancelIdleCallback: {writable: true, enumerable: true, configurable: true, value: ƒ} captureEvents: {writable: true, enumerable: true, configurable: true, value: ƒ} chrome: {value: {…}, writable: true, enumerable: true, configurable: false} clear: {writable: true, enumerable: false, configurable: true, value: ƒ} clearInterval: {writable: true, enumerable: true, configurable: true, value: ƒ} clearTimeout: {writable: true, enumerable: true, configurable: true, value: ƒ} clientInformation: {enumerable: true, configurable: true, get: ƒ, set: ƒ} close: {writable: true, enumerable: true, configurable: true, value: ƒ} closed: {value: false, writable: false, enumerable: true, configurable: true} confirm: {writable: true, enumerable: true, configurable: true, value: ƒ} console: {value: console, writable: true, enumerable: false, configurable: true} copy: {writable: true, enumerable: false, configurable: true, value: ƒ} createImageBitmap: {writable: true, enumerable: true, configurable: true, value: ƒ} crypto: {set: undefined, enumerable: true, configurable: true, get: ƒ} customElements: {set: undefined, enumerable: true, configurable: true, get: ƒ} debug: {writable: true, enumerable: false, configurable: true, value: ƒ} decodeURI: {writable: true, enumerable: false, configurable: true, value: ƒ} decodeURIComponent: {writable: true, enumerable: false, configurable: true, value: ƒ} defaultStatus: {enumerable: true, configurable: true, get: ƒ, set: ƒ} defaultstatus: {enumerable: true, configurable: true, get: ƒ, set: ƒ} devicePixelRatio: {enumerable: true, configurable: true, get: ƒ, set: ƒ} dir: {writable: true, enumerable: false, configurable: true, value: ƒ} dirxml: {writable: true, enumerable: false, configurable: true, value: ƒ} document: {set: undefined, enumerable: true, configurable: false, get: ƒ} encodeURI: {writable: true, enumerable: false, configurable: true, value: ƒ} encodeURIComponent: {writable: true, enumerable: false, configurable: true, value: ƒ} escape: {writable: true, enumerable: false, configurable: true, value: ƒ} eval: {writable: true, enumerable: false, configurable: true, value: ƒ} event: {enumerable: false, configurable: true, get: ƒ, set: ƒ} external: {enumerable: true, configurable: true, get: ƒ, set: ƒ} fetch: {writable: true, enumerable: true, configurable: true, value: ƒ} find: {writable: true, enumerable: true, configurable: true, value: ƒ} focus: {writable: true, enumerable: true, configurable: true, value: ƒ} frameElement: {set: undefined, enumerable: true, configurable: true, get: ƒ} frames: {value: Window, writable: true, enumerable: true, configurable: true} getComputedStyle: {writable: true, enumerable: true, configurable: true, value: ƒ} getEventListeners: {writable: true, enumerable: false, configurable: true, value: ƒ} getSelection: {writable: true, enumerable: true, configurable: true, value: ƒ} globalThis: {value: Window, writable: true, enumerable: false, configurable: true} history: {set: undefined, enumerable: true, configurable: true, get: ƒ} indexedDB: {set: undefined, enumerable: true, configurable: true, get: ƒ} innerHeight: {enumerable: true, configurable: true, get: ƒ, set: ƒ} innerWidth: {enumerable: true, configurable: true, get: ƒ, set: ƒ} inspect: {writable: true, enumerable: false, configurable: true, value: ƒ} isFinite: {writable: true, enumerable: false, configurable: true, value: ƒ} isNaN: {writable: true, enumerable: false, configurable: true, value: ƒ} isSecureContext: {set: undefined, enumerable: true, configurable: true, get: ƒ} keys: {writable: true, enumerable: false, configurable: true, value: ƒ} length: {value: 0, writable: true, enumerable: true, configurable: true} localStorage: {set: undefined, enumerable: true, configurable: true, get: ƒ} location: {value: Location, writable: true, enumerable: true, configurable: false} locationbar: {enumerable: true, configurable: true, get: ƒ, set: ƒ} matchMedia: {writable: true, enumerable: true, configurable: true, value: ƒ} menubar: {enumerable: true, configurable: true, get: ƒ, set: ƒ} monitor: {writable: true, enumerable: false, configurable: true, value: ƒ} monitorEvents: {writable: true, enumerable: false, configurable: true, value: ƒ} moveBy: {writable: true, enumerable: true, configurable: true, value: ƒ} moveTo: {writable: true, enumerable: true, configurable: true, value: ƒ} name: {enumerable: true, configurable: true, get: ƒ, set: ƒ} navigator: {set: undefined, enumerable: true, configurable: true, get: ƒ} offscreenBuffering: {enumerable: false, configurable: true, get: ƒ, set: ƒ} onabort: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onafterprint: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onanimationend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onanimationiteration: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onanimationstart: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onappinstalled: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onauxclick: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onbeforeinstallprompt: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onbeforeprint: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onbeforeunload: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onblur: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oncancel: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oncanplay: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oncanplaythrough: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onchange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onclick: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onclose: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oncontextmenu: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oncuechange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondblclick: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondevicemotion: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondeviceorientation: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondeviceorientationabsolute: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondrag: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondragend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondragenter: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondragleave: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondragover: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondragstart: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondrop: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ondurationchange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onemptied: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onended: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onerror: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onfocus: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onformdata: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ongotpointercapture: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onhashchange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oninput: {enumerable: true, configurable: true, get: ƒ, set: ƒ} oninvalid: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onkeydown: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onkeypress: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onkeyup: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onlanguagechange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onload: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onloadeddata: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onloadedmetadata: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onloadstart: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onlostpointercapture: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmessage: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmessageerror: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmousedown: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmouseenter: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmouseleave: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmousemove: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmouseout: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmouseover: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmouseup: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onmousewheel: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onoffline: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ononline: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpagehide: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpageshow: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpause: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onplay: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onplaying: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointercancel: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerdown: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerenter: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerleave: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointermove: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerout: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerover: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerrawupdate: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpointerup: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onpopstate: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onprogress: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onratechange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onrejectionhandled: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onreset: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onresize: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onscroll: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onsearch: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onseeked: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onseeking: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onselect: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onselectionchange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onselectstart: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onstalled: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onstorage: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onsubmit: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onsuspend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ontimeupdate: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ontoggle: {enumerable: true, configurable: true, get: ƒ, set: ƒ} ontransitionend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onunhandledrejection: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onunload: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onvolumechange: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwaiting: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwebkitanimationend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwebkitanimationiteration: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwebkitanimationstart: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwebkittransitionend: {enumerable: true, configurable: true, get: ƒ, set: ƒ} onwheel: {enumerable: true, configurable: true, get: ƒ, set: ƒ} open: {writable: true, enumerable: true, configurable: true, value: ƒ} openDatabase: {writable: true, enumerable: true, configurable: true, value: ƒ} opener: {value: null, writable: true, enumerable: true, configurable: true} origin: {enumerable: true, configurable: true, get: ƒ, set: ƒ} outerHeight: {enumerable: true, configurable: true, get: ƒ, set: ƒ} outerWidth: {enumerable: true, configurable: true, get: ƒ, set: ƒ} pageXOffset: {enumerable: true, configurable: true, get: ƒ, set: ƒ} pageYOffset: {enumerable: true, configurable: true, get: ƒ, set: ƒ} parent: {value: Window, writable: true, enumerable: true, configurable: true} parseFloat: {writable: true, enumerable: false, configurable: true, value: ƒ} parseInt: {writable: true, enumerable: false, configurable: true, value: ƒ} performance: {enumerable: true, configurable: true, get: ƒ, set: ƒ} personalbar: {enumerable: true, configurable: true, get: ƒ, set: ƒ} postMessage: {writable: true, enumerable: true, configurable: true, value: ƒ} print: {writable: true, enumerable: true, configurable: true, value: ƒ} profile: {writable: true, enumerable: false, configurable: true, value: ƒ} profileEnd: {writable: true, enumerable: false, configurable: true, value: ƒ} prompt: {writable: true, enumerable: true, configurable: true, value: ƒ} queryObjects: {writable: true, enumerable: false, configurable: true, value: ƒ} queueMicrotask: {writable: true, enumerable: true, configurable: true, value: ƒ} releaseEvents: {writable: true, enumerable: true, configurable: true, value: ƒ} requestAnimationFrame: {writable: true, enumerable: true, configurable: true, value: ƒ} requestIdleCallback: {writable: true, enumerable: true, configurable: true, value: ƒ} resizeBy: {writable: true, enumerable: true, configurable: true, value: ƒ} resizeTo: {writable: true, enumerable: true, configurable: true, value: ƒ} screen: {enumerable: true, configurable: true, get: ƒ, set: ƒ} screenLeft: {enumerable: true, configurable: true, get: ƒ, set: ƒ} screenTop: {enumerable: true, configurable: true, get: ƒ, set: ƒ} screenX: {enumerable: true, configurable: true, get: ƒ, set: ƒ} screenY: {enumerable: true, configurable: true, get: ƒ, set: ƒ} scroll: {writable: true, enumerable: true, configurable: true, value: ƒ} scrollBy: {writable: true, enumerable: true, configurable: true, value: ƒ} scrollTo: {writable: true, enumerable: true, configurable: true, value: ƒ} scrollX: {enumerable: true, configurable: true, get: ƒ, set: ƒ} scrollY: {enumerable: true, configurable: true, get: ƒ, set: ƒ} scrollbars: {enumerable: true, configurable: true, get: ƒ, set: ƒ} self: {value: Window, writable: true, enumerable: true, configurable: true} sessionStorage: {set: undefined, enumerable: true, configurable: true, get: ƒ} setInterval: {writable: true, enumerable: true, configurable: true, value: ƒ} setTimeout: {writable: true, enumerable: true, configurable: true, value: ƒ} speechSynthesis: {set: undefined, enumerable: true, configurable: true, get: ƒ} status: {enumerable: true, configurable: true, get: ƒ, set: ƒ} statusbar: {enumerable: true, configurable: true, get: ƒ, set: ƒ} stop: {writable: true, enumerable: true, configurable: true, value: ƒ} styleMedia: {set: undefined, enumerable: true, configurable: true, get: ƒ} table: {writable: true, enumerable: false, configurable: true, value: ƒ} toolbar: {enumerable: true, configurable: true, get: ƒ, set: ƒ} top: {value: Window, writable: false, enumerable: true, configurable: false} trustedTypes: {set: undefined, enumerable: true, configurable: true, get: ƒ} undebug: {writable: true, enumerable: false, configurable: true, value: ƒ} undefined: {value: undefined, writable: false, enumerable: false, configurable: false} unescape: {writable: true, enumerable: false, configurable: true, value: ƒ} unmonitor: {writable: true, enumerable: false, configurable: true, value: ƒ} unmonitorEvents: {writable: true, enumerable: false, configurable: true, value: ƒ} values: {writable: true, enumerable: false, configurable: true, value: ƒ} visualViewport: {enumerable: true, configurable: true, get: ƒ, set: ƒ} webkitCancelAnimationFrame: {writable: true, enumerable: true, configurable: true, value: ƒ} webkitMediaStream: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitRTCPeerConnection: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitRequestAnimationFrame: {writable: true, enumerable: true, configurable: true, value: ƒ} webkitRequestFileSystem: {writable: true, enumerable: true, configurable: true, value: ƒ} webkitResolveLocalFileSystemURL: {writable: true, enumerable: true, configurable: true, value: ƒ} webkitSpeechGrammar: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitSpeechGrammarList: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitSpeechRecognition: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitSpeechRecognitionError: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitSpeechRecognitionEvent: {writable: true, enumerable: false, configurable: true, value: ƒ} webkitStorageInfo: {set: undefined, enumerable: true, configurable: true, get: ƒ} webkitURL: {writable: true, enumerable: false, configurable: true, value: ƒ} window: {value: Window, writable: false, enumerable: true, configurable: false}
node中的全局對象的屬性:
// node.js 中 Object.getOwnPropertyDescriptors(globalThis) { Object: { value: [Function: Object], writable: true, enumerable: false, configurable: true }, Function: { value: [Function: Function], writable: true, enumerable: false, configurable: true }, Array: { value: [Function: Array], writable: true, enumerable: false, configurable: true }, Number: { value: [Function: Number], writable: true, enumerable: false, configurable: true }, parseFloat: { value: [Function: parseFloat], writable: true, enumerable: false, configurable: true }, parseInt: { value: [Function: parseInt], writable: true, enumerable: false, configurable: true }, Infinity: { value: Infinity, writable: false, enumerable: false, configurable: false }, NaN: { value: NaN, writable: false, enumerable: false, configurable: false }, undefined: { value: undefined, writable: false, enumerable: false, configurable: false }, Boolean: { value: [Function: Boolean], writable: true, enumerable: false, configurable: true }, String: { value: [Function: String], writable: true, enumerable: false, configurable: true }, Symbol: { value: [Function: Symbol], writable: true, enumerable: false, configurable: true }, Date: { value: [Function: Date], writable: true, enumerable: false, configurable: true }, Promise: { value: [Function: Promise], writable: true, enumerable: false, configurable: true }, RegExp: { value: [Function: RegExp], writable: true, enumerable: false, configurable: true }, Error: { value: [Function: Error] { stackTraceLimit: 10 }, writable: true, enumerable: false, configurable: true }, EvalError: { value: [Function: EvalError], writable: true, enumerable: false, configurable: true }, RangeError: { value: [Function: RangeError], writable: true, enumerable: false, configurable: true }, ReferenceError: { value: [Function: ReferenceError], writable: true, enumerable: false, configurable: true }, SyntaxError: { value: [Function: SyntaxError], writable: true, enumerable: false, configurable: true }, TypeError: { value: [Function: TypeError], writable: true, enumerable: false, configurable: true }, URIError: { value: [Function: URIError], writable: true, enumerable: false, configurable: true }, globalThis: { value: <ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Function], queueMicrotask: [Function: queueMicrotask], clearImmediate: [Function: clearImmediate], setImmediate: [Function] }, writable: true, enumerable: false, configurable: true }, JSON: { value: Object [JSON] {}, writable: true, enumerable: false, configurable: true }, Math: { value: Object [Math] {}, writable: true, enumerable: false, configurable: true }, console: { value: { log: [Function: bound consoleCall], warn: [Function: bound consoleCall], dir: [Function: bound consoleCall], time: [Function: bound consoleCall], timeEnd: [Function: bound consoleCall], timeLog: [Function: bound consoleCall], trace: [Function: bound consoleCall], assert: [Function: bound consoleCall], clear: [Function: bound consoleCall], count: [Function: bound consoleCall], countReset: [Function: bound consoleCall], group: [Function: bound consoleCall], groupEnd: [Function: bound consoleCall], table: [Function: bound consoleCall], debug: [Function: bound consoleCall], info: [Function: bound consoleCall], dirxml: [Function: bound consoleCall], error: [Function: bound consoleCall], groupCollapsed: [Function: bound consoleCall], Console: [Function: Console], profile: [Function: profile], profileEnd: [Function: profileEnd], timeStamp: [Function: timeStamp], context: [Function: context], [Symbol(kBindStreamsEager)]: [Function: bound ], [Symbol(kBindStreamsLazy)]: [Function: bound ], [Symbol(kBindProperties)]: [Function: bound ], [Symbol(kWriteToConsole)]: [Function: bound ], [Symbol(kGetInspectOptions)]: [Function: bound ], [Symbol(kFormatForStdout)]: [Function: bound ], [Symbol(kFormatForStderr)]: [Function: bound ] }, writable: true, enumerable: false, configurable: true }, Intl: { value: {}, writable: true, enumerable: false, configurable: true }, ArrayBuffer: { value: [Function: ArrayBuffer], writable: true, enumerable: false, configurable: true }, Uint8Array: { value: [Function: Uint8Array], writable: true, enumerable: false, configurable: true }, Int8Array: { value: [Function: Int8Array], writable: true, enumerable: false, configurable: true }, Uint16Array: { value: [Function: Uint16Array], writable: true, enumerable: false, configurable: true }, Int16Array: { value: [Function: Int16Array], writable: true, enumerable: false, configurable: true }, Uint32Array: { value: [Function: Uint32Array], writable: true, enumerable: false, configurable: true }, Int32Array: { value: [Function: Int32Array], writable: true, enumerable: false, configurable: true }, Float32Array: { value: [Function: Float32Array], writable: true, enumerable: false, configurable: true }, Float64Array: { value: [Function: Float64Array], writable: true, enumerable: false, configurable: true }, Uint8ClampedArray: { value: [Function: Uint8ClampedArray], writable: true, enumerable: false, configurable: true }, BigUint64Array: { value: [Function: BigUint64Array], writable: true, enumerable: false, configurable: true }, BigInt64Array: { value: [Function: BigInt64Array], writable: true, enumerable: false, configurable: true }, DataView: { value: [Function: DataView], writable: true, enumerable: false, configurable: true }, Map: { value: [Function: Map], writable: true, enumerable: false, configurable: true }, BigInt: { value: [Function: BigInt], writable: true, enumerable: false, configurable: true }, Set: { value: [Function: Set], writable: true, enumerable: false, configurable: true }, WeakMap: { value: [Function: WeakMap], writable: true, enumerable: false, configurable: true }, WeakSet: { value: [Function: WeakSet], writable: true, enumerable: false, configurable: true }, Proxy: { value: [Function: Proxy], writable: true, enumerable: false, configurable: true }, Reflect: { value: {}, writable: true, enumerable: false, configurable: true }, decodeURI: { value: [Function: decodeURI], writable: true, enumerable: false, configurable: true }, decodeURIComponent: { value: [Function: decodeURIComponent], writable: true, enumerable: false, configurable: true }, encodeURI: { value: [Function: encodeURI], writable: true, enumerable: false, configurable: true }, encodeURIComponent: { value: [Function: encodeURIComponent], writable: true, enumerable: false, configurable: true }, escape: { value: [Function: escape], writable: true, enumerable: false, configurable: true }, unescape: { value: [Function: unescape], writable: true, enumerable: false, configurable: true }, eval: { value: [Function: eval], writable: true, enumerable: false, configurable: true }, isFinite: { value: [Function: isFinite], writable: true, enumerable: false, configurable: true }, isNaN: { value: [Function: isNaN], writable: true, enumerable: false, configurable: true }, SharedArrayBuffer: { value: [Function: SharedArrayBuffer], writable: true, enumerable: false, configurable: true }, Atomics: { value: Object [Atomics] {}, writable: true, enumerable: false, configurable: true }, WebAssembly: { value: Object [WebAssembly] { compile: [Function: compile], validate: [Function: validate], instantiate: [Function: instantiate] }, writable: true, enumerable: false, configurable: true }, global: { value: <ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Function], queueMicrotask: [Function: queueMicrotask], clearImmediate: [Function: clearImmediate], setImmediate: [Function] }, writable: true, enumerable: true, configurable: true }, process: { get: [Function: get], set: [Function: set], enumerable: false, configurable: true }, Buffer: { get: [Function: get], set: [Function: set], enumerable: false, configurable: true }, URL: { value: [Function: URL], writable: true, enumerable: false, configurable: true }, URLSearchParams: { value: [Function: URLSearchParams], writable: true, enumerable: false, configurable: true }, TextEncoder: { value: [Function: TextEncoder], writable: true, enumerable: false, configurable: true }, TextDecoder: { value: [Function: TextDecoder], writable: true, enumerable: false, configurable: true }, clearInterval: { value: [Function: clearInterval], writable: true, enumerable: true, configurable: true }, clearTimeout: { value: [Function: clearTimeout], writable: true, enumerable: true, configurable: true }, setInterval: { value: [Function: setInterval], writable: true, enumerable: true, configurable: true }, setTimeout: { value: [Function: setTimeout] { [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)] }, writable: true, enumerable: true, configurable: true }, queueMicrotask: { value: [Function: queueMicrotask], writable: true, enumerable: true, configurable: true }, clearImmediate: { value: [Function: clearImmediate], writable: true, enumerable: true, configurable: true }, setImmediate: { value: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)] }, writable: true, enumerable: true, configurable: true }, [Symbol(Symbol.toStringTag)]: { value: 'global', writable: false, enumerable: false, configurable: true } }
瀏覽器環境和 node.js 環境全局對象屬性對比:
既然列出了瀏覽器和 node.js 的全局對象屬性,那就稍微對比一下在 node.js 環境中多了哪些屬性吧。
// 在 node.js 環境中, 通過 Object.getOwnPropertyNames(globalThis) 得到以下 NodeGlobalThisPropsNames var NodeGlobalThisPropsNames = [ 'Object', 'Function', 'Array', 'Number', 'parseFloat', 'parseInt', 'Infinity', 'NaN', 'undefined', 'Boolean', 'String', 'Symbol', 'Date', 'Promise', 'RegExp', 'Error', 'EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'globalThis', 'JSON', 'Math', 'console', 'Intl', 'ArrayBuffer', 'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array', 'Uint32Array', 'Int32Array', 'Float32Array', 'Float64Array', 'Uint8ClampedArray', 'BigUint64Array', 'BigInt64Array', 'DataView', 'Map', 'BigInt', 'Set', 'WeakMap', 'WeakSet', 'Proxy', 'Reflect', 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'eval', 'isFinite', 'isNaN', 'SharedArrayBuffer', 'Atomics', 'WebAssembly', 'global', 'process', 'Buffer', 'URL', 'URLSearchParams', 'TextEncoder', 'TextDecoder', 'clearInterval', 'clearTimeout', 'setInterval', 'setTimeout', 'queueMicrotask', 'clearImmediate', 'setImmediate' ] // 在瀏覽器環境中(本例子為 google),獲得以下 googleGlobalThisPropsNames // 大概有近千個屬性,由於篇幅關系就不一一列出了,可以參考上面的 瀏覽器中的全局對象的屬性 var googleGlobalThisPropsNames = Object.getOwnPropertyNames(globalThis) // 過濾出 node.js 獨有的全局對象屬性 var nodeProps = NodeGlobalThisPropsNames var webProps = googleGlobalThisPropsNames var noRepProps = nodeProps.filter(i=>webProps.indexOf(i)===-1) // 打印得到 noRepProps = ['global','process','Buffer','clearImmediate','setImmediate']
得到過濾后的 node.js 全局屬性:
- global 用於指向全局對象。
- clearImmediate 和 setImmediate 是用於執行回調函數的定時器,一個 set 一個 clear 和其他定時器使用相似,其實在新版的 IE 已經被提出,但由於各種因素應該不會成為標准。
- process 提供了有關當前 Node.js 進程的信息並對其進行控制。
- Buffer 用於以字節序列的形式來表示二進制數據。 Uint8Array 類的子類。
全局對象的常見屬性:
Infinity
功能:代表正的無窮大的數值。
注意:Infinity代表了超出JavaScript處理范圍的數值。也就是說JS無法處理的數值都是Infinity。實踐證明,JS所能處理的最大值是1.7976931348623157e+308,而最小值是5e-324。
示例:
console.log(6/0); //Infinity console.log(-6/0); //-Infinity console.log(0/0); //NaN console.log(1.7976931348623157E+10308); //Infinity console.log(-1.7976931348623157E+10308); //-Infinity
NaN
功能:代表非數字的值。
注意:請使用 isNaN() 方法來判斷一個值是否是數字,原因是 NaN 與所有值都不相等,包括它自己。
示例:
var a = Number('100'); var b = Number('hello world'); console.log(a); //100 console.log(b); //NaN console.log(isNaN(a)); //false console.log(isNaN(b)); //true
Undefined
功能:代表未定義的值。
注意:判斷一個變量是否未定義,只能用 === undefined 運算來測試,因為 == 運算符會認為 undefined 值等價於 null,即undefined == null會返回true。null 表示無值,而 undefined 表示一個未聲明的變量,或已聲明但沒有賦值的變量,或一個並不存在的對象屬性。
示例:
var a; var b = ''; var c = null; console.log(a === undefined); //true console.log(b === undefined); //false console.log(c == undefined); //true
全局對象的常見方法:
1、encodeURI(URIString)
功能:
- 將字符串作為URI進行編碼,返回值為URIstring 的副本。
- 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
- 該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#
- 提示:如果 URI 組件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。
參數:
- URIString(必須):一個待編碼的字符串。
示例:
console.log(encodeURI('http://www.baidu.com')); //http://www.baidu.com console.log(encodeURI('http://www.baidu.com/my mind')); //http://www.baidu.com/my%20mind console.log(encodeURI(',/?:@&=+$#')); //,/?:@&=+$#
2、encodeURIComponent(URIString)
功能:
- 將字符串作為URI組件進行編碼,返回值為URIstring的副本。
- 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
- 其他字符(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。
參數:
- URIString(必須):一個待編碼的字符串。
注意:encodeURI和encodeURIComponent的區別:
- 它們都是編碼URL,唯一區別就是編碼的字符范圍,其中encodeURI方法不會對下列字符編碼 ASCII字母、數字、~!@#$&*()=:/,;?+'
- encodeURIComponent方法不會對下列字符編碼 ASCII字母、數字、~!*()'
- 所以encodeURIComponent比encodeURI編碼的范圍更大。
- 實際例子來說,encodeURIComponent會把 http:// 編碼成 http%3A%2F%2F 而encodeURI卻不會。
- 相應的,存在decodeURI()和decodeURIComponent是用來解碼的,逆向操作。
示例:
// 當你需要編碼整個URL,然后使用這個URL,則使用encodeURI。 console.log(encodeURI('http://www.baidu.com/home/some other thing')); //編碼后為:http://www.baidu.com/home/some%20other%20thing; 其中,空格被編碼成了%20 //但是如果你用了encodeURIComponent console.log(encodeURIComponent('http://www.baidu.com/home/some other thing')); //http%3A%2F%2Fwww.baidu.com%2Fhome%2Fsome%20other%20thing 連 "/" 都被編碼了,整個URL已經沒法用了 // 當你需要編碼URL中的參數時,那么使用encodeURIComponent。 var param = "http://www.baidu.com/home/"; //param為參數 param = encodeURIComponent(param); var url = "http://www.baidu.com?next=" + param; console.log(url) //'http://www.baidu.com?next=http%3A%2F%2Fwww.baidu.com%2Fhome%2F' //顯然,參數中的 "/" 被編碼了,而如果用encodeURI肯定要出問題,因為后面的/是需要編碼的。
3、parseInt(string,radix)
功能:解析一個字符串,並返回一個整數。
參數:
- string(必須):待解析的字符串
- radix(可選):表示要解析的數字的基數。該值介於 2 ~ 36 之間。
如果省略該參數或其值為 0,則數字將以 10 為基礎來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 為基數。如果該參數小於 2 或者大於 36,則 parseInt() 將返回 NaN。
示例:
console.log(parseInt('10')); //10 console.log(parseInt('11',9)); //10 (9+1) console.log(parseInt('11',2)); //3 (2+1) console.log(parseInt('17',8)); //15 (8+7) console.log(parseInt('1f',16)); //31 (16+15) console.log(parseInt('010')); //10 console.log(parseInt('0x0011')); //17
4、parseFloat()
功能:解析一個字符串,並返回一個浮點數。該函數指定字符串中的首個字符是否是數字。如果是,則對字符串進行解析,直到到達數字的末端為止。
參數:
- string(必須):待解析的字符串
注意:開頭和結尾的空格是允許的。如果字符串的第一個字符不能被轉換為數字,那么 parseFloat() 會返回 NaN。如果只想解析數字的整數部分,請使用 parseInt() 方法。
示例:
console.log(parseFloat('10')); //10 console.log(parseFloat('10.00')); //10 console.log(parseFloat('10.33')); //10.33 console.log(parseFloat(' 60 ')); //60 首尾的空格會忽略 console.log(parseFloat('23 34 45')); //23 中間的空格不會忽略,會中斷 console.log(parseFloat('23 years')); //23 console.log(parseFloat('i am 23')); //NaN
5、isFinite(number)
功能:用於檢查其參數是否是無窮大。
參數:
- number(必須):待檢測數字。
- 如果 number 是有限數字(或可轉換為有限數字),那么返回 true。否則,如果 number 是 NaN(非數字),或者是正、負無窮大的數,則返回 false。
示例:
console.log(isFinite(123)); //true console.log(isFinite(-1.23)); //true console.log(isFinite(5-2)); //true console.log(isFinite(0)); //true console.log(isFinite(0/0)); //false console.log(isFinite('Hello')); //false
6、isNaN(number)
功能:用於檢查其參數是否為非數字值。
參數:
- number(必須):待檢測數字。
- 如果 number 是非數字值 NaN(或者能被轉換成NaN),返回 true,否則返回 false。
注意:isNaN() 函數通常用於檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是否是合法的數字。當然也可以用 isNaN() 函數來檢測算數錯誤,比如用 0 作除數的情況。
示例:
console.log(isNaN(123)); //false console.log(isNaN(-1.23)); //false console.log(isNaN(5-2)); //false console.log(isNaN(0)); //false console.log(isNaN(0/0)); //true console.log(isNaN('Hello')); //true
7、Number(object)
功能:把對象的值轉換為數字。
參數:
- object(必須):待轉換的對象。
- 如果參數是 Date 對象,Number() 返回從1970年1月1日至今的毫秒數,即時間戳。如果對象的值無法轉換為數字,那么 Number() 函數返回 NaN。
示例:
console.log(Number(new Boolean(true))); //1 console.log(Number(new Boolean(false))); //0 console.log(Number(new Date())); //1506266494726 console.log(Number(new String('999'))); //999 console.log(Number(new String('999 888'))); //NaN
8、String(object)
功能:把對象的值轉換為字符串。
參數:
- object(必須):待轉換的對象。
示例:
console.log(String(new Boolean(true))); //'true' console.log(String(new Boolean(false))); //'false' console.log(String(new Date())); //'Sun Sep 24 2017 23:25:43 GMT+0800 (CST)' console.log(String(new String('999'))); //'999' console.log(String(new String('999 888'))); //'999 888' console.log(String(12345)); //'12345'
JavaScript 中的三大對象 (本地對象、內置對象、 宿主對象)
本地對象
- Object 對象屬性和方法
- String 對象屬性和方法
- Array 對象屬性和方法
- Date 對象屬性和方法
- Number 對象屬性和方法
- RegExp 對象屬性和方法
- Function 對象屬性和方法
- Boolean 對象屬性和方法
- Error 對象屬性和方法
內置對象
宿主對象