为什么 0.._ 等于 undefined


为什么 0.._ 等于 undefined

前言

今天看文章 为什么用「void 0」代替「undefined」 的时候,

作者提到,用 void 0 替代 undefinded 的原因其中有一点是前者更短,更省空间。

当然最主要的原因还是 undefinded 在局部作用域中可以被重写

下面有人回复 0.._ 长度更短,结果也是 undefinded。 后面解释说是相当于 0['_'],不过没有更深入的讨论了。

当时心中产生了几个问题:

  1. 0.._ 是如何隐式转换成 undefined
  2. 为何(几乎)没有人采用 0.._ 的写法代替 void 0


理解 Python 中的 __init_subclass__


在Python的世界里,几乎所有的东西都是可变的。

起步

类方法 __init_subclass__3.6whatsnew3.6) 引入,作用是可以在不使用元类的情况下改变子类的行为。也就是说它是独立于元类编程的,也能达到编辑其他类的一种手段。那么,如何来理解它呢?


JS源码解析之Array.prototype.sort


前言

今天有个小伙伴( chrome v59 )遇到一个这样的问题,

[1,2,13,14,5,6,17,18,9,10,11,12,31,41].sort(()=>0)
// [18,1,13,14,5,6,17,2,9,10,11,12,31,41]
[1,2,13,14,5,6,17,18,9,10].sort(()=>0)
// [1,2,13,14,5,6,17,18,9,10]

然后我在自己电脑上( chrome v76 )测试是这样的结果

[1,2,13,14,5,6,17,18,9,10,11,12,31,41].sort(()=>0)
// [1,2,13,14,5,6,17,18,9,10,11,12,31,41]
[1,2,13,14,5,6,17,18,9,10].sort(()=>0)
// [1,2,13,14,5,6,17,18,9,10]

我们知道,给一个 sort 的比较函数中返回0,表示当前比较的两个元素相等

照理说,sort(()=>0) 后数组的元素顺序是不变的,和我的测试效果一致,

那为什么在 低版本的 chrome 上,不同长度的数组运用 sort(()=>0) 后效果不一样呢?


Python 中负数取模问题


起步

20190924161639.png

10 % -3,python 和 js 出来的结果不一样。我试着更多语言的结果,包括php和c在内的结果都是 1:

20190924161658.png

Python 得到的结果与其他语言不一样,所以 Python 是错的?然而,这个结果当然是 Python 有意为之,所以我更愿意把它归类到 python 坑里去,Python 对于异号除法的处理和大多流行的语言不一样。