2013-03-01 49 views
0

當我在Javascript中嘗試一些fundemantels時,遇到了一個讓我驚訝的問題,但我找不到答案。 我得到了以下,其中工程perfecty:Javascript定義對象,逗號大小寫

var obj= new Object(); 
    obj.test = "Hello" 

    obj.testTwo= function(){ 
     console.log(this.test) 
    },obj.testTwo(); 

當我嘗試它沒有一個逗號,這是行不通的。

var obj= new Object(); 
    obj.test = "Hello" 

    obj.testTwo= function(){ 
     console.log(this.test) 
    }obj.testTwo(); 

所以我試過這作爲第三個選項...它的工作原理?

var obj= new Object(); 
    obj.test = "Hello" 

    obj.testTwo= function(){ 
     console.log(this.test) 
    } 
    obj.testTwo(); 

現在我很安靜困惑。爲什麼要使用逗號,爲什麼它會在休息時間工作?

+2

[爲什麼使用分號?](http://stackoverflow.com/questions/2399935/why-use-semicolon) – jondavidjohn 2013-03-01 19:00:44

+0

JavaScript基本原理:使用分號,即使您認爲它是可選的。 – jbabey 2013-03-01 19:02:29

+1

當你爲[javascript逗號運算符]搜索StackOverflow時有很多答案(http://stackoverflow.com/search?q=javascript+comma+operator) – 2013-03-01 19:02:36

回答

0

逗號運算符評估它的兩個操作數(從左到右)並返回第二個操作數的值。

因此,它會評估您的兩個代碼。但是,當你把它們放在一起時不會。

閱讀more ...

例子:

這是相同的,當你做

var a = 10, b = 40; 
+0

但爲什麼只需要在匿名函數中使用它,那麼break又如何呢? – xhallix 2013-03-01 19:01:17

+0

@ChristophHa由於換行符(有時)會結束語句。 – ATOzTOA 2013-03-01 19:04:30

+0

所以在這種情況下休息安靜是否一樣? – xhallix 2013-03-01 19:05:29

0

換行符(\n\r\n)和逗號(,)充當語句分隔符。

2

在第一個片段中,逗號運算符在記錄文件時執行其職責:「evaluates both of its operands (from left to right) and returns the value of the second operand.MDN

基本上你的第二個片段是一個任務。即使最後一個表達式是一個語句塊,分配也應該以分號結尾。但是,這對ASI並不明顯。因此,此代碼段在塊和對象方法調用之間沒有分號或換行符的情況下失敗,其中解釋器期望看到運算符或賦值的終止。如果找不到,則會引發Unexpected token錯誤。這同樣的解釋代表爲什麼第三個片段能夠工作。