JavaScript高级程序设计读书笔记

数据类型

5 种基本数据类型:number、string、Boolean、null、undefined

多种引用类型:object、array、function、date 等

JS 中只有 6 个东西转换为 Boolean 值为 false:undefined、null、0、NaN、false、''(空字符串)

// 数据类型检测typeOf(来自jQuery源码)
function typeOf(v) {
  var f = Object.prototype.toString;
  return f.call(v).slice(8, -1); // '[object Array]' ==> 'Array'
}

Object.prototype.toString.call([]).slice(8, -1);

数组去重

数组去重常规方法,利用对象属性不能重复。

因为对象属性不支持对象,所以该方法不能用于对象数组的去重。

var arr = [1, 2, 33, 1, 2, 3, 4, 55, 22, 3];
function fun(arr) {
  var temp = [];
  var obj = {};
  for (var i = 0, length = arr.length; i < length; i++) {
    if (!obj[arr[i]]) {
      obj[arr[i]] = 1;
      temp.push(arr[i]);
    }
  }
  return temp;
}

数组去重 ES6 方法,利用 ES6 的 Set 对象不能重复的特性

var arr = [1, 2, 33, 1, 2, 3, 4, 55, 22, 3];
[...new Set(arr)];

优雅降级和渐进增强

在传统软件开发中,经常会提到向上兼容向下兼容的概念。渐进增强相当于向上兼容,而优雅降级相当于向下兼容。

eval 作用域

eval 在 JavaScript 中有两种调用方式:直接调用和间接调用。

直接调用时:eval 内代码块的作用域绑定到当前作用域。

间接调用时:eval 内代码块的作用域绑定到全局作用域。

JS 哪些操作会造成内存泄露

  • 意外声明的全局变量
  • 闭包
  • 被遗忘的计时器或回调
  • 没有清理的 DOM 元素引用

CSS

CSS 选择器优先级

  • !important
  • inline 行内样式
  • #ID
  • .class
  • markup
  • []属性、*通配符、伪类、>子、+相邻
  • 继承
  • 浏览器默认
© 2022  Arvin Xiang
Built with ❤️ by myself