美文网首页
Github每日一题——7.16学习记录

Github每日一题——7.16学习记录

作者: 极奏 | 来源:发表于2019-07-16 18:40 被阅读0次

    前言


    题目来自Daily-Interview-Question 木易杨
    欢迎star,加入讨论

    本文记录自己对题目的解决方式以及综合大神们的看法。

    题目


    1、分别写出如下代码的返回值

    String('11') == new String('11')
    String('11') === new String('11')
    

    答案:

    true
    false

    理由:

    ==操作符会调用toString()方法
    实际运行的是

    String('11') == new String('11').toString()
    

    ===比较就比较严格,因为String('11')是字符串,new String('11')是对象,所以不相等。

    2、不用加减乘除运算符,求整数的7倍

    位运算 NOT

    符号:~
    位运算 NOT 实质上是对数字求负,然后减 1。

    位运算 AND

    符号:&
    相同为1,不同为0

    位运算 OR

    符号:|
    有1就是1

    位运算 OR

    符号:^
    不同为1,相同为0

    左移运算

    符号:<<
    左移运算保留数字的符号位。
    左移x位就是乘以2的x次方

    有符号右移运算

    符号:>>
    有符号右移运算保留数字的符号位。
    有符号右移x位就是除以2的x次方

    无符号右移运算

    符号:>>>
    对于正数跟有符号运算结果一致
    对于负数:

    //把这个数字转换成无符号的等价形式(尽管该数字本身还是有符号的),可以通过以下代码获得这种形式:
    
    let iUnsigned64 = -64 >>> 0
    alert(iUnsigned64.toString(2))
    
    //11111111111111111111111111000000
    

    此题未完待续

    扩展

    • 不使用临时变量,交换两个数
    答案:
    let a = 5
    let b = 8
    
    b = a ^ 0
    a = b ^ 0
    

    3、React / Vue项目时为什么要在列表组件中写 key,其作用是什么?

    答案:

    React / Vue项目时为什么要在列表组件中写 key,其作用是什么?

    Vue中的key
    • key是给每一个vnode的唯一id,可以依靠key,更准确, 更快的拿到oldVnode中对应的vnode节点。
    • 因为带key就不是就地复用了,在sameNode函数 a.key === b.key对比中可以避免就地复用的情况。所以会更加准确。
    • 利用key的唯一性生成map对象来获取对应节点,比遍历方式更快。
    • 另外,vue中某些情况下不带key可能性能更好,在遍历模板简单的情况下,会导致虚拟新旧节点对比更快,节点也会复用。而这种复用是就地复用。
    React中的key
    • key帮助React识别哪些项目已更改,已添加或已删除。应该为数组内部的元素赋予键,以使元素具有稳定的标识

    4、['1', '2', '3'].map(parseInt) what & why ?

    ['1', '2', '3'].map(parseInt)
    

    答案:

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

    • map函数的第一个参数callback接收两个参数,第一个参数代表当前被处理的元素,而第二个参数代表该元素的索引。
    • parseInt则是用来解析字符串的,使字符串成为指定基数的整数。
      parseInt(string, radix)

    1、parseInt('1', 0) //radix为0时,且string参数不以“0x”和“0”开头时,按照10为基数处理。这个时候返回1
    2、parseInt('2', 1) //基数为1(1进制)表示的数中,最大值小于2,所以无法解析,返回NaN
    3、parseInt('3', 2) //基数为2(2进制)表示的数中,最大值小于3,所以无法解析,返回NaN
    4、map函数返回的是一个数组,所以最后结果为[1, NaN, NaN]

    扩展:

    let unary = fn => val => fn(val)
    let parse = unary(parseInt)
    console.log(['1.1', '2', '0.3'].map(parse))
    

    输出结果是?

    答案:

    [1,2,0]

    理由:

    将parseInt放进unary的意思是返回一个只带一个参数的parseInt函数出来。
    parseInt第二个参数默认为十进制。

    用babel编译一下就好理解多了

    "use strict";
    
    var unary = function unary(fn) {
      return function (val) {
        return fn(val);
      };
    };
    
    var parse = unary(parseInt);
    console.log(['1.1', '2', '0.3'].map(parse));
    

    相关文章

      网友评论

          本文标题:Github每日一题——7.16学习记录

          本文链接:https://www.haomeiwen.com/subject/ehgtlctx.html