1. Function.prototype的类型是函数
typeof Function.prototype === 'function'; // true
2. Array.prototype的类型是数组
Array.isArray(Array.prototype); // true
3. 构造函数的返回值为基本数据类型时,其被实例化时将不生效
function People() { return 'a'; } // People {} function People() { return 3; } // People {} function People() { return false; } // People {} function People() { return null; } // People {} function People() { return undefined; } // People {}
4. 函数表达式中的函数名不可变更
5. 严格模式下,全局作用域内的直接函数的this指向undefined(非Window)
6. 可以使用按位或操作进行向下取整
var x = 1.9; x | 0; // 1
7. 常用的继承模式
function Super() { this.wealth = 1000; } function Child(name) { Super.call(this); this.name = name; } const extend = function(SuperClass, ChildClass) { var F = function() {}; F.prototype = SuperClass.prototype; ChildClass.prototype = new F(); ChildClass.prototype.constructor = ChildClass; }; extend(Super, Child); const c = new Child('Lilei'); c.wealth; // 1000 c.name; // 'Lilei';
8. Number()
Number(null); // 0 Number(undefined); // NaN
9. switch语句中的case子句使用的是严格相等来做判断
10. 类型转换
(1) 当尝试将[0]转换为布尔类型时,[0]将被转换为true;
(2) 当[0] == true做比较时,布尔类型会被转为数字(true -> 1),对象类型(如数组)会首先点用toString()方法,尝试将其转为字符串,而后将字符串转为数字(过程:[0] -> '0' -> 0。
[0] == true; // 如下: 0 == 1; // false
11. 关于拷贝
11.1 拷贝一个对象,如果其某个属性是基本类型,拷贝的是属性的数据值;反之,如果其某个属性为引用类型,则拷贝的是属性的引用地址。
11.2 “浅拷贝”与“深拷贝”的基础区别,“浅拷贝”只解决了对象第一层的拷贝问题。
11.3 常见的浅拷贝方式
// 1. Object.assign方法 const copy = Object.assign({}, sources); // 2. spread扩展运算法 const copy = { ... sources }; // 3. 数组slice方法 const sliced = sources.slice();
// 4. 数组concat方法
const c = a.concat(b);
11.4 关于深拷贝概念的理解
神拷贝会拷贝所有的属性,并动态分配拷贝属性指向的内存,当对象和它所引用的对象一起拷贝时即深拷贝。
// 持续补充中