2016-12-30 67 views
7

我已經經歷了ES6假設它會很容易切換到2017年的EcmaScript含義與函數調用

儘管經歷,我弄糊塗了這段代碼

function f (x, y = 7, z = 42) { 
    return x + y + z 
} 
f(1) === 50 

其中有ES5相當於

function f (x, y, z) { 
    if (y === undefined) 
     y = 7; 
    if (z === undefined) 
     z = 42; 
    return x + y + z; 
}; 
f(1) === 50; 

我也從中理解默認參數的事情。

但到底是什麼意思f(1)===50在兩個代碼?它有什麼用處?

下面是另一個例子

function f (x, y, ...a) { 
    return (x + y) * a.length 
} 
f(1, 2, "hello", true, 7) === 9 

是什麼f(1, 2, "hello", true, 7) === 9意思?

我明白===爲運營商既包括的類型,而不僅僅是價值的LHS和RHS之間的比較。

但是爲什麼它被這樣使用?

請解釋它的用法。

這是我從哪裏得到的鏈接。 http://es6-features.org/#RestParameter

+0

['==='運算符](http://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons)絕不是新的,它從一開始就存在於JavaScript中。 –

+0

如果你的意思是「爲什麼做一個比較,而不是將它分配給一個變量或在一個循環中使用它」,它可能只是測試代碼在控制檯中顯示。 –

+0

它只是一個比較它們的值和數據類型(s) – Beginner

回答

1

根據我的觀點,你幾乎是以正確的方式採用它。

只需將該函數調用與if條件中的三重等號結合在一起即可。

if (f(1) === 50){ 
    console.log(true); 
} 
else { 
    console.log(false); 
} 

那就是它。

三等於只是一個比較運算符。而三元組等於操作符一側的函數調用意味着從該函數返回的值。

因此,只要把它當作任何其他的comparison operator在javascript中。

如果我錯誤地解釋了你的問題,請糾正我。

一切順利!

2

f(1)===50檢查f(1)如果該表達式評估爲true,等於50則此表達式的結果是true。否則它是false。由於您沒有將此值分配給變量,因此您無法在任何地方使用它。

形式上,===被稱爲全等運算符。欲瞭解更多信息,請看看here

+0

你可以在控制檯中使用它:https://i.imgur。 com/zqeoEWl.png –

+0

@ÁlvaroGonzálezofcourse你可以在控制檯中看到這個,但是你不能在任何地方使用這個值。這是我的觀點。在consle中你只能看到評估的結果。 – Christos

+0

正確。正如Maxx指出的那樣,在生產代碼中沒有用處。但它可以幫助發展。 –

3

這是一個嚴格的比較測試是否功能f(x,y,z),當與1個返回值50的x參數值稱爲這將是真時,默認參數值添加到x是7和42

這些函數調用和比較純粹是爲它們所調用的函數提供使用示例和可能的測試示例。

代碼

function f (x, y, ...a) { 
    return (x + y) * a.length 
} 
f(1, 2, "hello", true, 7) === 9 

是延長的參數處理的例子。 ...a變量長度屬性等於3,因此測試確認在xy之後傳遞給函數的參數數量。

2

這裏的要點是它的示例代碼。他們告訴你,用這些參數調用函數的結果等於某件事。表達式本身不會做任何事情,除非將它粘貼到控制檯中。

他們可以很容易地使用評論。

f(1, 2, "hello", true, 7) // 9 
1

身份(===)操作者行爲相同的相等(==)操作者除了沒有類型轉換完成後,將類型必須被認爲是相等的相同。

在你的例子中,如果你將所有三個數值類型的參數,你會得到數字作爲結果,然後檢查結果是否有正確的類型,你必須使用===運算符。

也許這個例子會在你的情況更加清晰:

f(1,1,1) // returns 3 - numeric type 
f(1,1,"1") // returns "111" - string type 
//so now if you will write 
f(1,1,1) == "3" // true 
f(1,1,1) == 3 // true 
f(1,1,1) === "3" // false, because the result is 3 not "3" as string. 
f(1,1,1) === 3 // true 
f(1,1,"1") == "111" // true 
f(1,1,"1") == 111 // true 
f(1,1,"1") === "111" // true 
f(1,1,"1") === 111 // false, because the result is string "111" not 111 number. 

所以你的情況這===操作符用來仔細檢查,如果結果真的是你希望它是什麼。