数据类型
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
- []属性、*通配符、伪类、>子、+相邻
- 继承
- 浏览器默认