为什么这段函数运行的不符合预期?
生活随笔
收集整理的這篇文章主要介紹了
为什么这段函数运行的不符合预期?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
貌似樓主的需求是要對a,b數組中的不同元素作為函數執行的結果返回。1、樓上兄弟說的運算符優先級問題,但是首先.是不是運算符有待討論,翻了下犀牛書下,沒發現把.歸在運算符中,而是稱之為調用表達式。但從樓主的意圖看,的確如1樓兄弟所說,樓主可能認為是先運算了?:操作,再執行的filter函數。2、第一,在這段代碼中,>=的優先級要高于?:,所以先運算這部分,根據它的結果來決定執行賦值,是賦arr1,還是arr2.filter()之后的結果。第二,filter的寫法有點怪怪的,雖然這么寫也沒有什么問題。filter返回一個新的數組,不會對原數組進行修改,返回的數組的元素就是通過了傳入的函數真值檢測的值。第一段中,如果arr1的長度大了,返回一個數組,結果必定是true,如果arr2的長度大了,會檢測arr1中的是否包含傳入的元素,結果為true,返回了這個元素。繞到這才看的明白,函數要對arr2過濾,返回和arr1中相同的元素。那么問題來了,第一,從這段代碼中無法保證filter函數中的返回值符合預期,因為通過了filter中條件后return回去的ele不能保證一定為true,比如ele是0,undefined,null等。而沒有通過if條件檢測時則隱式的返回了undefined,也就是false。所有感覺怪怪的。
因為.運算符的優先級高于:運算符啊,var newArr = arr1.length>=arr2.length?arr1:arr2.filter實際上是var newArr = arr1.length>=arr2.length?arr1:(arr2.filter)你要的是(var newArr = (arr1.length>=arr2.length?arr1:arr2).filter)看懂了嗎?
因為.運算符的優先級高于:運算符啊,var newArr = arr1.length>=arr2.length?arr1:arr2.filter實際上是var newArr = arr1.length>=arr2.length?arr1:(arr2.filter)你要的是(var newArr = (arr1.length>=arr2.length?arr1:arr2).filter)看懂了嗎?
總結
以上是生活随笔為你收集整理的为什么这段函数运行的不符合预期?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江湖十一腰马怎么提升?
- 下一篇: 红豆粉葛汤的做法?