js中屬性點 和中括號 的關係。

2022-02-28 19:04:43 字數 1445 閱讀 2209

本來這裡說的是 js 執行乙個字串形式函式的方法。

但是呢看到乙個 window['test'] ,居然一下子轉不過彎來。這就尷尬了。 

不是說好了 和 . 其他都是 「什麼的什麼」 關係嗎?如 'window.onload' ,表示 window 的載入事件。

使用 function fn(){} 定義了乙個函式,和使用 var fn=function(){} 相同的呢。 那這裡的 fn 就相當於 window 下的變數咯。所以是 window['fn'] 。

那問題又來了,為什麼是加字串的 ['fn'] 而不是不加字串的 [fn] 呢? 不加不報錯,返回 undefined 。似乎是乙個求定義的變數?那 var fn=function(){} 不是定義了麼?

1. 中括號運算子總是能代替點運算子。但點運算子卻不一定能全部代替中括號運算子。

2. 中括號運算子可以用字串變數的內容作為屬性名。點運算子不能。

看來這裡的「可以用」得改為「需要用」了。

var a=0;

//undefined

a//0

window.a

//0window[a]

//window

window['a']

//0

3. 中括號運算子可以用純數字為屬性名。點運算子不能。

這個倒是經常用,使用下標時用。如 arr[0] 。這裡不引號 arr[0] 就和加引號的 arr['0'] 相同了。

4. 中括號運算子可以用js的關鍵字和保留字作為屬性名。點運算子不能。

window[window]=1

//2window[window]

//window {}

window[window]

//1//為什麼 window.window=2 都有返回值2了,但 再執行 window.window 時卻沒有成功?

//另外 window[window] 輸入的值還是 1 ,也就是也沒有被第一次的 window.window=2 改變。

//請問 window.window=2 去哪了?

下面把本來的 js 執行字串形式的函式貼一下。下面的 eval 方法好像很多人不喜歡用,據說是因為安全問題。如果是把 json 字串轉為物件什麼的, json.parse('''') 是經常用的。

再上兩個例子。

function func(a)

eval('func()');//

呼叫函式不傳入引數

eval('func("bcd")');//

呼叫函式,傳入引數

var bb = 'function play()';

var ss =bb;

var ex = ;

ex.getplay();

JS 點和中括號

今天上午做乙個很low的小練習,寫完了想要封裝重複利用來著 可是憋屈啊,怎麼都不對,在document.style.width這裡,想把width變成引數可是用點的話,會報錯說找不到點後邊這個屬性 也是啊,點就是 的 的意思,點後邊放乙個abc代替,他當然會認為你要找style裡邊的abc屬性啊。不...

JS中的大括號 和中括號 詳解

一 大括號,表示定義乙個物件,大部分情況下要有成對的屬性和值,或是函式。如 var langshen 上面宣告了乙個名為 langshen 的物件,屬性名和值用 冒號 隔開,多個屬性或函式用,逗號 隔開,因為是物件的屬性,所以訪問時,應該用.點 來層層訪問 langshen.name langshe...

js中物件取值的點語法和中括號語法的區別

js中對於物件取值時有兩種方法,一種是點語法,一種是中括號語法.但總有人不清楚什麼時候用哪種.網上其他部落格有的說的不太全.這次詳細的說的介紹一下 中括號語法 任何時候 場合都可使用 適用範圍很廣 點語法 較有侷限性,一下說一下 舉例一 let obj console.log obj.a 123 c...