js當中,window localStorage和localStorage兩種呼叫寫法有什麼區別?

時間 2021-05-31 02:26:13

1樓:朱涵俊

如果localStorage不存在,window.localStorage不會異常,返回undefined

而localStorage會異常,使用不存在的變數。

如果window.localStorage有值,效果一樣。

比如你可以判斷 if(window.localStorage)來判斷是否支援localStorage

但是不能用if(localStorage)來判斷是否支援localStorage

但是可以用let localStorage = window.localStorage;然後再用if(localStorage)來判斷是否支援。

2樓:Kuroneko

我的理解: js中的window物件是唯一乙個既可以當作變數宣告命名空間也可以當作乙個物件命名空間的特殊空間。

在全域性作用域下宣告的全域性變數會被自動掛載在window物件上。比如

你會發現列印出乙個空字串而不是undefined。

3樓:洪永健

一種是從作用域裡面找到window物件,再取window物件裡面的localstorage,另外一種是直接從作用域裡面找localstorage。在變數不被覆蓋的情況下,無論是查詢window物件或者localstorage物件最終會都到全域性上下文的變數物件裡面找,因為在瀏覽器,js的全域性上下文的變數物件就是window,所以window. localstorage的寫法相當於全域性上下文的變數物件(window).

window. localstorage,而localstorage的寫法相當於全域性上下文的變數物件( window). localstorage。

因為全域性上下文變數物件裡面的window指向的就是自己,所以通過這兩種方式取到的localstorage是同乙個。

4樓:小飄飄

localStorage不是系統關鍵字,所以假如在區域性作用域內定義了localStorage變數。而你使用的上下文context正處於區域性作用域內的話,js引擎會在作用域鏈中查詢,先從當前的作用域鏈內查詢,如果當前作用域鏈內存在localStorage變數則中斷查詢返回變數結果。如果當前作用域鏈內不存在localStorage,則會在作用域鏈上一直向上查詢,順藤摸瓜查到全域性作用域下(window),而window存在localStorage原型,所以就會返回window下的localStorage結果。

如果當前執行的上下文是處於全域性(window)作用域下,則window.localStorage和單獨localStorage沒有任何差別。它們兩個是全等,可以通過instanceof來判斷,其實屬於同乙個原型。

5樓:賀師俊

有答案已經寫了,你可以有乙個名為localStorage的區域性變數,遮蔽掉全域性的localStorage,window.localStorage則總是全域性上的。不過你一樣可以有個叫做window的區域性變數(所以仍可以間接地遮蔽)。

包括globalThis也是一樣(實際上,可以被區域性變數所遮蔽是globalThis設計的需求之一) 。

排除遮蔽問題,這兩種寫法是沒有區別的。

不過在JS裡確實有乙個東西,寫成foo和寫成window.foo會有差別,那就是eval。 另外IE9之前的老IE裡,setTimeout和window.

setTimeout有詭異的小bug,當你覆蓋window.setTimeout時setTimeout卻仍然是原樣 。

6樓:Innei

有區別。在瀏覽器中的情況 @夏目已經提到了。

在服務端 NodeJS 中不存在 window 全域性物件,自然沒有 localStorage,但是有庫可以 polyfill,使 nodejs 也有 localStorage,但是它不存在與 window。

引申:在前端開發中,require 和 window.require 兩種呼叫寫法有什麼區別?

require 是 webpack 或者其他打包工具提供的函式,在編譯過程中被解釋,但是在 prod 中並不存在 require。但是在 electron 的開發中,存在 require 和 window.require 兩個方法,這兩個方法是完全不一樣的,如果在 electron 中使用 require 的時候定要想清楚是 require ?

還是 window.require

7樓:夏木

有些區別。

在瀏覽器中,window 是 js 的根作用域上掛載的全域性物件,且修改無效。無論你在哪個作用域使用使用 window.localStorage 只會返回 localStorage 的內容。

而使用 localStorage 則是根據作用域冒泡查詢的原則,從你當前使用的作用向上查詢 localStorage 變數,直到 window 為止。而 localStorage 不是保留字,可以定義修改,所有返回結果不一定為 localStorage 的內容,如下。

function

fnfn

();// 輸出結果

// Storage

// haha

8樓:

在瀏覽器js中的window物件,預設就是全域性物件,所有的全域性變數(屬性)和全域性函式(方法)都是預設在window上的,因為是全域性的變數和函式,所以在使用或者呼叫的時候,預設是可以省略window的,所以這兩個寫法並沒有差別

怎麼學習前端JS?

Gitee 題主既然已經提到了有一點想法,那就要比一些空學了一些技術卻完全沒有想法的同學多前進了一步。你目前的問題是有想法,但又不知道怎麼實踐,那不妨來 Gitee 看一看你的想法已經有哪些人實踐了 開源軟體 碼雲 Gitee.com Gitee 上收錄了很多優秀甚至頂尖的開源軟體,從大框架到小工具...

js 原型鏈怎麼理解?

江南公子旭 function animal function dog animal.price 2000 dog.prototype animal 解 因為這裡這是將這個函式的prototype屬性賦值成了 animal 並不是他 new 出來的乙個物件 所以animal 不是他的建構函式 所以do...

js中 slice 與 Array prototype slice 有什麼區別

Keita Array.prototype.slice可以被重寫,slice實際用的是Array.prototype.slice,但不能顯式修改.slice,中ownpropertity只有length乙個屬性 Object getOwnPropertyNames Array prototype l...