容易被忽視的js細節

Array.length

設置 length 屬性會改變數組的大小。若是設置的值比其當前值小,數組將被截斷,其尾部的元素將丟失。若是設置的值比它的當前值大,數組將增大,新的元素被添加到數組的尾部,它們的值爲 undefined。這意味着你截取尾部能夠採用length -1 的方式而不須要使用substring,splice等方法。
複製代碼

Array.every和Array.some

這兩個方法可能不少同窗不太常常使用,對於數組對象來講,它的迭代方式很是多,如each,filter,reduce 等等吧,這兩個方法是作什麼用的呢?官方的說法是:測試數組的全部元素是否都經過了指定函數的測試。這兩個方法都不會改變原有數組的結構
複製代碼

語法:arr.every(callback, [thisArg])數組

第一個參數爲回調函數,第二個參與用以替代callback中this的指向,callback 被調用時傳入三個參數:元素值,元素的索引,原數組。這和通常的迭代方法差很少了。舉例:下例檢測數組中的全部元素是否都大於 0函數

function isBigThenZero(element, index, array) {測試

return(element > 0);this

}spa

var zero = [-12, 5, -8, 13, 4].every(isBigThenZero); // passed is falsecode

zero = [12, 54, 18, 1, 4].every(isBigThenZero); // passed is true對象

every在用法上與some基本一致,他們不一樣的點其實從字面上也能看出一些,every返回true的要求是數組中每一項都必須知足條件,而some是隻要又一個元素知足條件就會返回true。從這兩個方法咱們能夠看出當咱們須要對數組元素作一些特定的驗證又不但願對數組有改動時,能夠採用這兩種方法。若是咱們選擇使用each和for循環去作校驗,可能還須要引入中間變量,不如這樣簡潔。繼承

對象的可枚舉性

for...in循環:只遍歷對象自身的和繼承的可枚舉的屬性。索引

Object.keys():返回對象自身的全部可枚舉的屬性的鍵名。element

JSON.stringify():只串行化對象自身的可枚舉的屬性。

Object.assign(): 忽略enumerable爲false的屬性,只拷貝對象自身的可枚舉的屬性。

JSON

JSON.stringify(value,[,replacer[,space]]) 這個咱們經常使用的序列化方法是有3個參數的,中間的參數用於序列化時的處理,第三個參數能夠用於美化輸出的字符串,好比增長2個空格縮進

mdn解釋:

value

將要序列化成 一個JSON 字符串的值。

replacer 可選

若是該參數是一個函數,則在序列化過程當中,被序列化的值的每一個屬性都會通過該函數的轉換和處理;若是該參數是一個數組,則只有包含在這個數組中的屬性名纔會被序列化到最終的 JSON 字符串中;若是該參數爲null或者未提供,則對象全部的屬性都會被序列化;關於該參數更詳細的解釋和示例,請參考使用原生的 JSON 對象一文。

space 可選

指定縮進用的空白字符串,用於美化輸出(pretty-print);若是參數是個數字,它表明有多少的空格;上限爲10。該值若小於1,則意味着沒有空格;若是該參數爲字符串(字符串的前十個字母),該字符串將被做爲空格;若是該參數沒有提供(或者爲null)將沒有空格。

forEach

forEach方法在循環至結尾元素前不能終止循環,內部使用return 只是跳出本次循環,如必定要跳出循環,能夠採用拋出異常的方式來終止循環。

持續補充中......

相關文章
相關標籤/搜索