算法刷题 JavaScript 语法查漏补缺

字符串

ansii 码与字符互转

'a'.charCodeAt()
String.fromCharCode(97)

补充头部

整型转为 32 位二进制表示:

console.log((123).toString(2).padStart(32, '0'))

数值

整数范围

数值最大范围:

console.log(Number.MAX_VALUE) // 1.7976931348623157e+308
console.log(Number.MIN_VALUE) // 5e-324

能表示的整数范围

console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991
console.log(Number.MIN_SAFE_INTEGER) // -9007199254740991

数组遍历、对象

forEach 不适合用于算法刷题,无法使用 break 、 continue 、 return 中断循环。

优先还是使用常规的 for 来进行遍历,因为可以控制 i 从哪里开始遍历。

如果为了方便且确定全量遍历的,可使用 for i in arr 语法遍历索引, for v of arr 遍历值。

对象只能使用 for k in obj 语法遍历索引,不能使用 for of 语法。

Set 和 Map

Set 和 Map 在工程项目中不常用,但算法刷题中常常用到。

集合 Set

一种无序且唯一的数据结构

const set = new Set();
set.add(1);
set.add(2);
if (set.has(1)) {
  set.delete(1);
}
console.log(set.size);

创建为数组、数组去重:

const arr = [...set]; // Array.from(set)

可使用 for (let val of set) 遍历值;

Map

js 中,优先使用 Map 而不是 Object:

  • 它可以存放任意类型的 key 值,在频繁增删键值对的场景下表现更好。
  • 在 LeetCode 中,Map 性能比 object 更好。
  • 它的 key 值顺序为首次插入的顺序,但是 object 不一定保持这个顺序,有时是字典序
var map = new Map();
map.set(1, 0);
map.set(2, 1);
if (map.has(2)) {
  map.delete(2);
}
console.log(map.get(2));
console.log(map.size);

初始化时赋值:

let first = new Map([
  [1, "one"],
  [2, "two"],
  [3, "three"],
]);

可使用 for (let [k, v] of map) 遍历键、值;可以理解为它内部是类似存了键值对的二维数组。

进制转换

JavaScript 常用的进制显示与转换

本文收录于专栏
记录 JavaScript 刷题时用到的一些语法、代码片段、工具、经验等