学习笔记 2020-11-04
JavaScript 高级程序设计(第4版) 阅读记录
客户端检测
用户代理检测
用户代理检测通过浏览器的用户代理字符串确定使用的是什么浏览器。用户代理字符串包含在每个 HTTP 请求的头部,在 JS 中可以通过 navigator.userAgent 访问。
- Firefox核心是- Gecko
- IE核心是- Trident
- Safari核心是- WebKit
- Chrome核心是- Blink
- Opera核心是- Presto
软件与硬件检测
识别浏览器与操作系统
- navigator.oscpu- 对应用户代理字符串中操作系统/系统架构相关信息。 
- navigator.vendor- 包含浏览器开发商信息。 
- navigator.platform- 表示浏览器所在的操作系统。 
- screen.colorDepth和- screen.pixelDepth- 返回一样的值,即显示器每像素颜色的位深,不包含 alpha 通道。 
- screen.orientation- 返回一个 - ScreenOrientation对象,包含- Screen Orientation API定义的屏幕信息。
浏览器元数据
- Geolocation API - 可以让浏览器脚本感知当前设备的地理位置。 
现代 JavaScript 教程
可迭代对象
Array.from
这个函数接收一个必选的可迭代对象或类数组对象,接收两个可选的参数,第一个是映射函数,第二个是映射函数的 this 值。
let range = {
  from: 1,
  to: 5
};
range[Symbol.iterator] = function () {
  return {
    current: this.from,
    last: this.to,
    next() {
      if (this.current <= this.last) {
        return { done: false, value: this.current++ };
      } else {
        return { done: true };
      }
    }
  };
};
let arr = Array.from(range, num => num * num);
console.log(arr); // [1, 4, 9, 16, 25];function slice(str, start, end) {
  return Array.from(str).slice(start, end).join('');
}
let str = '𝒳😂𩷶';
console.log(slice(str, 1, 3)); // 😂𩷶
// 原生方法不支持识别代理对(译注:UTF-16 扩展字符)
console.log(str.slice(1, 3)); // 乱码(两个不同 UTF-16 扩展字符碎片拼接的结果)