JS 实践杂记

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 关于深拷贝概念的理解

  神拷贝会拷贝所有的属性,并动态分配拷贝属性指向的内存,当对象和它所引用的对象一起拷贝时即深拷贝。

// 持续补充中

posted @ 2021-11-30 16:02  樊顺  阅读(18)  评论(0编辑  收藏  举报