今天面临一个实际的需求:

- 欧式空间中一组点. point[i]代表第i个点.
- 用一个矩阵保留这组点的距离: distinct[i][j]这个代表i到j的距离
- 然后只保留距离每个点最近的几个点, 比如5个点.
- 造成的结果就是distinct[1][3]是有值的, 因为1的最近点有3.
- 但是 dintinct[3][1]就是一个特殊标志i, 代表他不是最近的点.
- 实际使用的时候, 如果distinct[1][3]有正常值, 那么我就要忽略distinct[3][1]中的标志值, 也就是distinct[3][1]也要当做有distinct[1][3]的值来用.

需求转化的描述为:

  • 两个值a, i,
    • 其中一个i不起作用.
    • aXa==a.
    • aXi==a.
    • a为任意数字.
    • i是一个特殊数字.
    • X是一种特殊运算. 目前满足条件的是   .
  • 最好能有一个额外的好处:
    • 1/i==0

我的猜想和测试

  1. i=infinity, X=   这个不成立. iX3和3Xi的时候出了问题.
  2. i=NaN, 一个满足要求的项目, 不过1/nan的加分项拿不到.
  3. undefined
  4. 0
  5. 负infinity
  6. null

这些结果都不是太满意, 忽然我灵机一动:

  • 解决问题: infinity和按位或, 解决了我的问题.
  • i=infinity, X=
  • 但是, 这个还是有一个小问题 Infinity Infinity ==0
    • infinity按位或自身的时候等于0.
名词解释
  1. infinity比任何数字都大, 但是, 他并不是0, 也不是每一位都是1. 按照按位或的结果, 或许他每一位都是0. 他的表现也很像一个正经的一阶无穷大, 比如他乘任何数还等于他自己. 一阶无穷大和0很像啊.
  2. NaN, 一个不是任何数字的数字,数字里面表示自己不是一个数字的符号:) , 同样有两个isnan判断一个值是否nan. 一般情况用全局的isnan就可以了, 但是全局isnan和number.isnan确实不一样, 可以参考mdn.
    1. typeof nan ==number
    2. 并且(nan == nan) 显示: false, ===就更是false了.
  3. number, 数字的名字类, 类似string
  4. undefined 他不等于nan,
    1. typeof undefined = undefined
    2. 如果进行计算, 他就等于nan了.
  5. null, 这个也很神奇, !null 等于true, 但是他不等于true或者false. 计算的时候null=0.
    1. typeof null= object
    2. null == undefined 强制转换的结果这个是true
    3. null === undefined 这个是false了.
    4. !null === !undefined 强制转换的结果, 这个也是true.
补充一个html input的知识点

不论input的类型是啥, 他的value都是string, 即便指定类型是number, 这个类型只是为了方便系统推出合理的键盘.