js都不知道的javascript

112 阅读1分钟

js常遇到问题

平时开发总喜欢相当然,然后就会有很多:惊不惊喜,意不意外

push和unshift的文档认知不全

let t = [].push(1)
console.log(t);  //1

let t = [''].unshift(1)
console.log(t); //2

MDN: push()  方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度

我还以为是返回新的数组呢,giao了半天是返回新的长度。


null和undefined在min,max等函数中的变化

Math.min(...[null,1,2])  //0
Math.min(...[undefined,1,2])  //NaN
Math.min(...['',1])  //0

MDN:给定数值中最小的数。如果任一参数不能转换为数值,则返回[NaN]

注意看啊,null是被判为0的,undefined是被转成NaN的


sort下的null和undefined

var items = [
  { name: 'A', value: -1 },
  { name: 'E',value:null },
  { name: 'B', value: undefined },
  { name: 'C', value: 0 },
  { name: 'D', value: 2 },
];
// sort by value
items.sort(function (a, b) {
  return (b.value - a.value)
});
console.log(items);
//{name: 'D', value: 2}
//{name: 'E', value: null}  null 做为0处理了
//{name: 'C', value: 0}
//{name: 'A', value: -1}
//name: 'B', value: undefined}

you see you see see,null是被当做0来处理的。再来看看undefined

var items = [
  { name: 'A', value: -1 },
  { name: 'B', value: undefined },
  { name: 'C', value: 0 },
  { name: 'D', value: 2 },
];
// sort by value
items.sort(function (a, b) {
  return (b.value - a.value)
});
//{name: 'A', value: -1}
//{name: 'B', value: undefined}  //居然没有排序
//{name: 'D', value: 2}
//{name: 'C', value: 0}
var items = [
  { name: 'A', value: -1 },
  { name: 'D', value: 2 },
  { name: 'B', value: undefined },
  { name: 'C', value: 0 },
];
//after sort  items...
//{name: 'D', value: 2}
//{name: 'C', value: 0}
//{name: 'A', value: -1}
//{name: 'B', value: undefined  //这里排序了

假如不想让null得值排到最后,可以这么写 return Number( b.value!= null) - Number( a.value!= null) || b.value - a.value ;


toFixed精度丢失

四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

console.log(0.555.toFixed(2)); //0.56
console.log(1.555.toFixed(2)); //1.55  //秃然的自我 --500
console.log(2.555.toFixed(2)); //2.56
console.log(3.555.toFixed(2)); //3.56


会持续跟新,有问题欢迎指出,谢谢