容易被忽视的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 只是跳出本次循环,如必定要跳出循环,能够采用抛出异常的方式来终止循环。

持续补充中......

相关文章
相关标签/搜索