2012-11-12 41 views
1
<!-- HTML --> 
<div id="target"></div> 

// JavaScript 
function MyObject() {} 

var $my_div = $('#target'), 
    data; 
$my_div.data('extra', (data = new MyObject())); 

在JavaScript中,表達式例如(data = new MyObject())評估爲MyObject object;而在像C這樣的語言中,表達式的值始終爲trueJavaScript中的賦值操作值

在上面的代碼片段中,(data = new MyObject())僅僅意味着做了與以下完全相同的事情的快捷方式嗎?

... 
var $my_div = $('#target'), 
    data = new MyObject(); 
$my_div.data('extra', data); 

澄清: 我起初不知道什麼(data = new MyObject())實際上做。我想知道爲什麼不把它們分開,而不是在.data()。問題是在.data()或單獨做這個表達之間是否有任何區別。

+3

那麼,有什麼問題嗎?是的,這就是它在JS中的作用。 – elclanrs

回答

1

大多數語言的賦值運算符實際上評估賦值的值(就像在JavaScript中一樣)。例如,它經常可以看到類似下面的C代碼:

MyObject* config = NULL; 
if (config = parse_config()) { 
    // config is not NULL 
} 

這只是一個特定語言(如果處理非NULL指針爲真例如)如何解釋一些事情。有些(如C#或Java)沒有,也要求你要具體,如:

MyObject config = null; 
if ((config = ParseConfig() != null) { 
    // config is not null 
} 

但是,它似乎並不爲可讀,所以很少有人去用它。

至於你的問題,這些例子做同樣的 - 沒有任何隱藏的神奇發現:)

7

在JavaScript中,表達例如(data = new MyObject())評估爲MyObject對象;而在像C語言寫成,表達式的值始終是true

否,在C就像在JavaScript中,相似的表達的結果是到MyObject對象的引用。非null對象引用是truthy,雖然(在兩種語言)。

在所有語法從B來源的語言(包括C,Java和JavaScript的,C#,和十幾個以上),而且很可能從其他家庭大多數語言中,一個賦值表達式的結果是右的表達的手邊。例如: -

a = b = c; 

...意爲「c值分配給b,然後再次將其指定爲a,而無需重新評估」。它確實是而不是的意思是「分配cb,然後分配truea」。我不知道哪種語言意味着(這並不意味着不存在)。在某些語言系列中,這意味着「比較bc並將該比較的結果指定爲a」(不更改bc),因爲=在這些語言中既擔任賦值運算符又擔任比較運算符,在這種情況下(右側生產),它是一個比較運算符。 (BASIC語言是這樣的。)

這不是一個真的答案,因爲沒有問題。但希望它可以幫助...

+0

+1「這不是答案」:-) – Bergi

+1

美麗的「無答案」:) – alex