JS冷门的现象

[‘1’,’2’,’3’].map(parseInt) => [1,NaN,NaN]
map() 数组方法
将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。callback含有三个参数(元素值,元素索引,原数组
注意:传递给map()的函数应该有返回值。map()返回的是新数组:它不修改调用的数组。如果是稀疏数组,返回的也是相同方式的稀疏数组:它具有相同的长度,相同的缺失元素。
parseInt(string,radix)
因为callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。而parseInt方法是可以接收两个参数的,第一个为被转化的值,第二个为被转化值的进制。map自动传入的第二个参数被当做进制了,也就是数组的index被当做进制数了。当进制数为0时,默认为10进制,故结论数组第一个值为1,。当parseInt的进制参数小于2或者大于36,就返回NaN,因此第二个值为NaN。第三个值为NaN的原因是相当于执行了parseInt(“3”,”2”),而2进制下数字3是不存在的,也返回了NaN。

let result = [1,[2,3]][3,2,1] => [1,[2,3]][1]=>[2,3]
源码的意图被 parser 误解,有两个必要条件:

  • parser 优先将行结束符前后的符号流按一条语句解析,这是 ECMAScript 标准的规定,所有 parser 必须要按此要求实现。
  • 行结束符之后的符号 (token) 有二义性,使得该符号与上条语句能够无缝对接,不导致语法错误。

实际上,有二义性的符号本来就不多,能导致源码意图被改变的符号数来数去就只有 [ 、( 、/ 、+ 、- 这五个而已。我们可以把它们理解成“脆弱的符号”,在它们前面显式地加上防御性分号 (defensive semicolon) 来保护其含义不被改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值