蛮可爱

文章 评论 浏览 29

蛮可爱 2022-05-04 13:57:52

parseInt('11', "4") 这个为啥等于5呢,他4进制,11应该也不在其范围内么,怎么会得出的结果为5呢

'11'表示的是4进制的数啊 5 是十进制 1=>1 2=>2 3=>3 10=>4 11=>5
没有包含大于三的数字 就可以 懂了吗

第 2 题:['1', '2', '3'].map(parseInt) what & why ?

蛮可爱 2022-05-04 13:57:15

@Ma63d 你给的链接里描述很清晰,microtask跟你说的这些无关。

链接描述,一个event loop的典型步骤:

  1. Select the oldest task...
  2. Set the event loop's currently running task to the task selected in the previous step.
  3. Run: Run the selected task.
  4. Set the event loop's currently running task back to null.
  5. Remove the task that was run in the run step above from its task queue.
  6. Microtasks: Perform a microtask checkpoint.
  7. Update the rendering
  8. If this is a worker event loop...
  9. Return to the first step of the event loop.

Update the rendering是event loop的一个步骤,Microtasks也是event loop的一个步骤,在执行完Microtasks,浏览器开始Update the rendering,至于run the resize steps等是Update the rendering里面的内容,跟Microtasks无关。

从 Promise 来看 JavaScript 中的 Event Loop、Tasks 和 Microtasks

蛮可爱 2022-05-04 13:56:27
/**
题目:随机生成一个长度为 10 的整数类型的数组,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5], [10, 11], [20]]。

理解:把连续的数字从小到大放到一个数组中
*/
//生成随机数
let arr = Array.from({length:10},()=>~~(Math.random()*20));
//[2, 10, 3, 4, 5, 11, 10, 11, 20]
[...new Set(arr)].sort((a,b)=>a-b).reduce((a,b)=>{
  var l= a.slice(-1)[0]; 
  l&& l.slice(-1)[0] + 1 == b ? l.push(b) : a.push([b]);
  return a;
},[]) // [[2,3,4,5],[10,11],[20]]

第 67 题:随机生成一个长度为 10 的整数类型的数组

蛮可爱 2022-05-04 13:51:56
Number.prototype.add = function (number) {
    if (typeof number !== 'number') {
        throw new Error('请输入数字~');
    }
    return this + number;
};
Number.prototype.minus = function (number) {
    if (typeof number !== 'number') {
        throw new Error('请输入数字~');
    }
    return this - number;
};
console.log((5).add(3).minus(2));

扩展

Object.prototype.add
Object.prototype.minus 

也是可以的

这个方法,可以扩展到数字字符串类型和排除 NaN

Number.prototype.add = function (value) {
    let  number = parseFloat(value);
    if (typeof number !== 'number' || Number.isNaN(number)) {
        throw new Error('请输入数字或者数字字符串~');
    };
    return this + number;
};
Number.prototype.minus = function (value) {
    let  number = parseFloat(value);
    if (typeof number !== 'number' || Number.isNaN(number)) {
        throw new Error('请输入数字或者数字字符串~');
    }
    return this - number;
};
console.log((5).add(3).minus(2));

对于在 Object 上添加原型方法是不建议的,因为这个影响太大,会影响所有以Object 构造的对象

function MyNumber(){
MyNumber.prototype= new Number().__proto__
MyNumber.prototype.add =  function (number) {
    if (typeof number !== 'number') {
        throw new Error('请输入数字~');
    }
    return this + number;
};
}

第 50 题:实现 (5).add(3).minus(2) 功能

蛮可爱 2022-05-04 13:48:38

@mqyqingfeng 大大,console.log(0 == "n")为什么是等于true?Number('n')没搞明白为什么等于0,不是说如果有一个字符不是数字,结果都会返回 NaN么?为啥Number('n')不是等于NaN

这个跟类型转换没啥关系。 是各个浏览器处理 if (false) {}的方式不一样。 chrome貌似是不论条件判断是否通过都会执行一遍里面的逻辑。 safari是不会执行里面的逻辑的。 貌似红宝书还是哪里说过这个来着具体忘记了

JavaScript 深入之类型转换(下)

蛮可爱 2022-05-04 08:12:37
  • typeinterface 区别
  • 使用 as 类型断言,and 双重断言
  • 后缀 ! 的作用

TypeScript 之常见类型(下)

蛮可爱 2022-05-02 01:37:29
Promise.retry = function (promiseFn, times = 3) {
  return new Promise(async (resolve, reject) => {
    while (times--) {
      try {
        var ret = await promiseFn();
        resolve(ret);
        break;
      } catch (error) {
        if (!times) reject(error);
      }
    }
  });
};
function getProm() {
    const n = Math.random();
    return new Promise((resolve, reject) => {
        setTimeout(() =>  n > 0.9 ? resolve(n) : reject(n), 1000);
    });
}
Promise.retry(getProm);

第 159 题:实现 Promise.retry,成功后 resolve 结果,失败后重试,尝试超过一定次数才真正的 reject

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文