2016-11-15 79 views
0

正在關注this教程,這些代碼行是什麼意思?JavaScript中的逗號運算符

var join = require('path').join 
    , pfx = join(__dirname, '../_certs/pfx.p12'); 

逗號運算符評估它的每個操作數(從左到右)並返回最後一個操作數的值。

這些線條如何寫得更容易?

+2

**是**逗號,但它不是**「逗號操作符」。 – Pointy

+0

@Pointy - 其實是對的,在這種情況下它只是一個分隔符。 – adeneo

+0

關於Pointy評論的參考文獻:[使用逗號(而不是逗號運算符)的'var'語句的語法](http://www.ecma-international.org/ecma-262/6.0/#sec-variable-statement)和[逗號運算符](http://www.ecma-international.org/ecma-262/6.0/#sec-comma-operator) –

回答

5

在這種情況下,逗號分隔兩個變量,這就是它,它一樣寫

var join = require('path').join; 
var pfx = join(__dirname, '../_certs/pfx.p12'); 

而是一個可以做

var join = require('path').join, 
    pfx = join(__dirname, '../_certs/pfx.p12'); 

在這種情況下,逗號僅僅是一個分隔符,就像它將是一個對象文字或數組一樣。

逗號操作,這是隻有當它作用於兩個表達式,一個在左邊,一個在右邊的操作,可以用來當你想在需要的地點的多個表達式一個單一的表達。

一個例子是return語句中

[1,2,3].reduce(function(a,b,i) { 
    return a[i] = b, a; // returns a; 
},[]); 

等等

+0

是它的簡寫,所以在聲明變量時不必編寫var兩次繼承 – Pixelomo

+0

速記,是的;但是當在開始或結束處添加或刪除變量時,這種表示法並不會提供乾淨的git diff。出於這個原因,我不喜歡它。 – RyanZim

0

它本質上是一樣的在許多情況下分號,所以你可以把它改寫爲這樣的:

var join = require('path').join; 
var pfx = join(__dirname, '../_certs/pfx.p12'); 

區別歸結爲像聲明變量(如您的示例)這樣的行,其中var應用於逗號分隔列表中的每個元素。除此之外,它或多或少是一個分號,儘管在大多數情況下不推薦使用逗號語法。

我個人更喜歡它的變量,因爲我覺得這看起來乾淨了一點:

var a = 5, 
    b = 6, 
    c, 
    d; 

但也有人不喜歡它。