2014-04-14 78 views
1

我有下面的小測試頁:應用++運算符返回的函數值會導致錯誤

var getNum = function(){ 
    return 5; 
}; 
var y = getNum()++; // This causes an error. 
document.write("y = " + y); 

這將導致這個錯誤在Firefox 27.01:如果我更改線路

ReferenceError: invalid assignment left-hand side 
var y = getNum()++; 

var y = getNum()++; 

var y = getNum() + 1; 

然後我得到沒有錯誤。會有人碰巧知道爲什麼getNum()++不被允許?謝謝。

+0

謝謝。我認爲我不知不覺地試圖做一些事情,如5 = 6 –

回答

1

因爲你基本上是寫y = 5++

+0

謝謝。我認爲5 ++實際上意味着5 = 5 + 1,而不是用6替換5。 –

0

運營商++等於+= 1

所以:

var y = getNum()++; 

一樣:

var y = 5 += 1; 
2

tldr:這沒有任何意義。

++操作者(如+=適用於Reference Specification Type的表達式。也就是說,++只有與「變量或屬性表達式」一起使用時纔有效。

引用類型用於解釋諸如delete,typeof和賦值運算符[包括++,+ =等]的運算符的行爲。例如,賦值的左側操作數預計會產生一個參考[​​規範類型表達式]。

這就是JavaScript如何將賦值的值返回到適當的變量/屬性。當不能進行這樣的分配時,例如試圖將++應用於函數調用或文字表達式的結果時,會引發運行時ReferenceError。

(以上總結來自a previous answer of mine。)

+1

+1另一種查看方法是[ECMA-262](http://ecma-international.org/ecma -262/5.1 /#sec-11.3)表示:它只能應用於有效的* LeftHandSideExpression *。 ++運算符評估表達式,將其加1,然後**將該值分配回表達式**。所以它只能在賦值表達式的左邊有效的東西上運行,其中任何種類的文字都是無效的。 – RobG

相關問題