分类
angular 技术

记一次写TS时,遇到的坑

当有时候想要创建一个 [[],[],[]]的时候,你会用什么方式尼?

[...Array(3)].fill([]);

[...Array(3)].map(i=>[]);

亦或者会想到

Array(3).fill(0).map(i=>[])

来给大家比较下这三个的区别

[...Array(3)].fill([]);

有坑,相信不少人也遇到过,具体的表现 可以看一下这段代码

var b = [...Array(3)].fill([]);
b[0].push('qiupu'); 
console.log(b);
// 0: ["qiupu"]
// 1: ["qiupu"]
// 2: ["qiupu"]

这个就不再多解释了,看不懂的可以加下群768901972

[...Array(3)].map(i=>[]);

在JS里写的时候是没有问题的,

var a = [...Array(3)].map(i=>[]); 
a[0].push('qiupu');
console.log(a);
// 0: ["qiupu"]
// 1: []
// 2: []

Array(3).fill(0).map(i=>[])

这个看着和上面那个没什么区别,就多了一次fill(0),那他的意义是什么,就是先填充0,避免了 TS 在转译目标为ES5的 将他编译为 Array(20).slice().map(function (i) { return []; })

这篇文章主要是告诉大家,目前的TS的转译可能还存在一定的问题,使用的时候,应该注意下,特别是空值的处理之类的,希望能帮到你

提供一个在线测试工具,方便没有TS环境

分类
未分类

valueof() toString() 的区别与共同点

共同点:在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用。

不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

前提是:返回的是基本形式,否则调用另一个来转换!

分类
ES6

从一道平平无奇的题开始认识 set,sort等功能

拿到题第一步,读懂题目 要求 数组扁平化 去重 升序排列 数组

输入参数是一个[[]]的形式,第一步扁平

function flatten(arr) {
     while (arr.some(item => Array.isArray(item))) {
         arr = [].concat(...arr);
     }
     return arr;
 }

这些都很基础, … 与 some ,不明白的随便看看es6 就明白了

 arr =  [...new Set(flatten(arr))];  //去重 转为set 去重,再转为数组
 function sortNumber(a,b)
 {
 return a - b
 }
arr.sort(sortNumber)

这一步的sortNumber 是个函数 有a,b两个输入,当输出的值 小于 0 ,那么 a 会被排列到 b 之前; 反之b 会被排列到 ba之前 .

有什么不明白的留言就可以,随缘回复