# 10-28

参考:

进度:

# 原子笔记

  • alert( NaN === NaN ); // false  通常使用 isNaN(value)
    Object.is(NaNNaN=== true
    Object.is(0-0=== false
    [NaN].indexOf(NaN)    // -1(严格相等 === 对 NaN 无效)
    
    1
    2
    3
    4

[NaN].includes(NaN) // true


- 使用`str.indexOf()`查找**所有**子字符串位置,简写。

```javascript
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
  alert( pos );
}
1
2
3
4
5
6
7
8
  • ~ 运算符。它将数字转换为 32-bit 整数(如果存在小数部分,则删除小数部分),然后对其二进制表示形式中的所有位均取反。

    • 对于 32-bit 整数,~n 等于 -(n+1)
    • if (~str.indexOf(...)) 读作 “if found”。(旧技巧)
  • 寻找数字数组中的最大子数组,O(n):

    function getMaxSubSum(arr) {
      let maxSum = 0;
      let partialSum = 0;
    
      for (let item of arr) { // arr 中的每个 item
        partialSum += item; // 将其加到 partialSum
        maxSum = Math.max(maxSum, partialSum); // 记住最大值
        if (partialSum < 0) partialSum = 0; // 如果是负数就置为 0
      }
    
      return maxSum;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
上次更新: 10/29/2020, 3:19:36 AM