es7 帶來了兩個新功能:array.prototype.includes() 和 新的指數運算子:**
array.prototype.includes()
使用 .indexof() 來確定乙個元素是否在陣列中存在的方式已經成為歷史。
['my','mom','hates','me'].indexof('mom') // 1// 雖然有些難以理解,但返回值 1 表示 'mom' 字串在陣列中的索引值,而不是陣列中只有乙個 'mom'。
重點其實是「存在」。
.indexof() 的「本職工作」應該是用來確定某個值在陣列中的索引。
而如果我們的目的是確定乙個元素是否在陣列中存在,那麼使用 .indexof() 並不是最好的選擇。理由很簡單:當查詢某個東西的存在性時我們希望得到乙個布林值,而不是數值。
array.prototype.includes() 做的恰恰就是這件事。它能確定陣列中是否包含給定元素,有就返回 true,否則返回 false 。
var life = ['mom', 'dad', 'brother']life.includes('mom') // true
life.includes('girlfriend') // false
深入標準
array.prototype.includes ( searchelement [ , fromindex ] )
深入了解 規範,就像一次尋找力量之旅。
規範中的內容如下:
讓我們循序漸進,用一些例子來理解規範。
# includes# [1] searchs in ascending order
# 搜尋按公升序進行
> array(10000000).concat(4).includes(4)
true # [time] 500 miliseconds 耗時 500ms
> [4].concat(array(10000000)).includes(4)
true # [time] 90 miliseconds 耗時 90ms
# [2] uses samevaluezero algorithm
# 使用 samevaluezero 演算法比較
> [nan].indexof(nan)
-1> [nan].includes(nan)
true
# [3] if found at any position returns true
# otherwise, false is returned
# 在任何位置找到都會返回 true,否則返回 false
> [1, 2, 3].includes(2)
true
> [1, 2, 3].includes(7)
false
# [4] it treats missing array elements as undefined
# 將陣列中缺失的元素視為 undefined
> [1, , 3].indexof(undefined)
-1> [1, , 3].includes(undefined)
true
這裡的區別是元素 4 的位置。在第乙個例子中 4 位於陣列末尾,所以 includes 方法會搜尋整個陣列。按規範,.includes() 方法會在找到 searchelement 後立即返回,所以第二個例子執行地更快。
samevaluezero 演算法與嚴格相等比較(.indexof()採用)的最大區別就是它允許檢測 nan 元素。
元素被找到就返回 true,否則返回 false。不再使用索引作為結果了
與 .indexof() 相反,.includes() 並不會跳過缺失的陣列元素,而會將其視為 undefined。
你已經開始感受到力量了麼?我們還沒說 fromindex 呢。
規範中是這樣寫的:
可選的第二引數 fromindex 預設值為 0(這意味整個陣列都會被搜尋)。如果這個引數的值大於或等於陣列長度,則會直接返回 false ,陣列將不會被搜尋。如果值為是負數,則代表相對於陣列末尾的偏移量。如果偏移量超過陣列長度,則整個陣列都會被搜尋。
# fromindex# [1] it defaults to 0
# 預設為 0
> [1,2,3].includes(1)
true
# [2] if >= array.length, false is returned
# 如果 >= array.length, 返回 false
> [1,2,3].includes(1, 10)
false
# [3] if negative, it is used as the offset, i.e.
# 如果為負數,則被用作偏移
# offset = array.length + fromindex
> [1,2,3].includes(3, -2) # fromindex = 3 (array length) + -2 (fromindex) = 1
true
> [1,2,3].includes(1, -5) # fromindex = 0
true
如果不提供 fromindex 引數則預設其為 0 ,這時整個陣列都將被搜尋。
當 fromindex 大於陣列長度時,.includes() 立即返回 false。
如果 fromindex 是負值, 那麼起始索引計算方式為 array.length—fromindex 。這在搜尋陣列末尾元素時很有用。例如 fromindex = -5 意味著只搜尋最後 5 個元素。
為了避免 .includes() 執行中斷,當計算得到的起始索引小於 0 時,整個陣列會被搜尋。我個人更希望中斷
好了——最後乙個新功能……
指數運算子(**)
我們一直期待著指數計算也能像進行加減乘除一樣方便。
是的,這一天已經到來。
操作符 ** 和 math.pow() 的行為一致。它返回第乙個運算元的第二個運算元次的乘方值 (例如 x ** y)。
# x ** y (aka math.pow(x,y))> 2 ** 2
4> 2 ** 'operand'
nan
就這麼多!
現在你已經掌握 es7 !好好用吧!
650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字n。你需要使用最少的操作次數,在記事本中列印出恰好n個 a 輸出能夠列印出n個 a ...
247 只有兩個鍵的鍵盤
題目描述 最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠...
650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...