JS一些常见的数组语法(ES5、ES6、ES7)

Math的一些

1、Math.abs(x)

含义: 返回 x 的绝对值
应用场景: 使 0.1+0.2 == 0.3
方法: 设置一个误差范围值,通常称为“机器精度”,而对于 Javascript 来说,这个值通常是2^-52,而在 ES6 中,已经为我们提供了这样一个属性:Number.EPSILON,而这个值正等于2^-52。这个值非常非常小,在底层计算机已经帮我们运算好,并且无限接近 0,但不等于 0,。这个时候我们只要判断(0.1+0.2)-0.3 小于 Number.EPSILON,在这个误差的范围内就可以判定 0.1+0.2===0.3 为true。

function numbersequal(a,b){
   
    return Math.abs(a-b)<Number.EPSILON;
}
var a=0.1+0.2, b=0.3;
console.log(numbersequal(a,b)); //true

此时,需要考虑兼容性的问题,在 chrome 中支持这个属性,但是 IE 并不支持(笔者的版本是 IE10 不兼容),所以我们还要解决 IE 的不兼容问题。

Number.EPSILON = (function () {
   
//解决兼容性问题
  return Number.EPSILON ? Number.EPSILON : Math.pow(2, -52);
})();
//上面是一个自调用函数,当JS文件刚加载到内存中,就会去判断并返回一个结果,相比if(!Number.EPSILON){
   
//Number.EPSILON=Math.pow(2,-52);
//}这种代码更节约性能,也更美观。
function numbersequal(a, b) {
   
  return Math.abs(a - b) < Number.EPSILON;
}
//接下来再判断
var a = 0.1 + 0.2,
    b = 0.3;
console.log(numbersequal(a, b)); //这里就为true了

2、Math.pow(x,y)

含义: 返回 x 的 y 次
应用场景: 上边的机器精度2^-52即可以用此方法求得
方法:

Math.pow(2, -52) = Number.EPSILON

3、Math.round()

含义: (小数点后第一位)大于五全部加,等于五正数加,小于五全不加。即四舍五入
应用场景:

// 小数点后第一位<5
正数:Math.round(11.46)=11
负数:Math.round(-11.46)=-11
 
// 小数点后第一位>5
正数:Math.round(11.68)=12
负数:Math.round(-11.68)=-12
 
// 小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-11

4、Math.ceil()

含义: 天花板,向上取整
应用场景:

Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=12
Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-11

5、Math.floor()

含义: 地板,向下取整
应用场景:

Math.floor(11.46)=Math.floor(11.68)=Math.floor(11.5)=11
Math.floor(-11.46)=Math.floor(-11.68)=Math.floor(-11.5)=-12

1、ES5数组方法

1、push()

含义: 接受多个参数,并将这些参数放置于数组尾部,返回新数组的长度,原始数组发生改变。
应用场景:

let arr=[1,2,3];
arr.push(4,5,6);
console.log(arr.push(4,5,6))//6
console.log(arr);//[1,2,3,4,5,6];

2、pop()

含义: 不接收参数,从数组尾部删除一个元素,并返回这个删除的元素,原数组发生改变。
应用场景:

var arr = [1,2,3,4]
console.log(arr.Pop( ))//4
console.log(arr);//[1,2,3]

3、unshift()

含义: 接受多个参数并将这些参数放置于数组头部,返回新数组的长度,原数组发生改变。
应用场景:

var arr=[1,2,5,3];
arr.unshift(10,11)//6
console.log(arr)//[10,11,1,2,5,3];

4、shift()

含义: 不接受参数,从数组的头部删除一个元素,并返回这个删除的元素,原数组发生改变。
应用场景:

var arr = [1,2,3,4]
arr.myShift()//1
console.log(arr)//[2,3,4]

5、slice()

含义: 如果是一个参数,那么该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组不发生改变。
如果有两个参数,从第一个参数表示的索引开始截取,到第二个参数表示的索引结束,不包括第二个参数对应的索引位上的元素
应用场景:

var arr=[1,2,3,4,5,6]
        var arr1=arr.slice(1,3)//[ 2, 3 ]

        var arr1=arr.slice()//[ 1, 2, 3, 4, 5, 6 ]
        //如果没有任何参数就会从头截取到尾部 拷贝

        var arr1=arr.slice(1)//[ 2, 3, 4, 5, 6 ]
        //如果第二个参数没有,就会从开始截取到尾部

        var arr1=arr.slice(-3,-1)//[ 4, 5 ]
        //如果是负数就会从后向前数,然后再截取
        //前小于后将参数转换为正向数值时,前面的必须小于后面
        
        var arr1=arr.slice(-3,5)//[ 4, 5 ]
		//如果第一个参数大于等于数组长度,或者第二个参数小于第一个参数,则返回空数组。
        console.log(arr1,arr)//[ 4, 5 ] [ 1, 2, 3, 4, 5, 6 ]

注: slice方法的一个重要应用,是将类似数组的对象转为真正的数组。

Array.prototype.slice.call({
    0'a', 1'b', length:2 }) //[ 'a', 'b' ]
Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);

上面代码的参数都不是数组,但是通过call方法,再它们上面调用slice方法,就可以把它们转为真正的数组。

6、splice()

含义: 如果一个参数,那么从该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组发生改变
如果有两个参数,从第一个参数表示索引,第二个参数表示的是截取的长度。
如果有三个及以上参数,从第一个参数表示索引,第二个参数表示的是截取的长度,后边的会从截取的位置添加至原数组里。
应用场景:

var arr = ['a', 'b', 'c', 'd', 'e', 'f']

//从原数组4号位置,删除了两个数组成员
arr.splice(4,2) //["e", "f"]

//原数组发生改变
console.log(arr) //["a", "b", "c", "d"]

//删除了两个,又插入了两个新元素
arr.splice(4,2,1,2) //["a", "b", "c", "d", 1, 2]

//如果起始位置使复数,就表示从倒数位置开始(不包括该元素)删除
//从倒数第四个位置c开始删除两个元素
arr.splice(-4,2)//["c",

你可能感兴趣的:(面试,JS,ES5,js,javascript,es6/es7)