手记

JavaScript笔记

1)连续赋值问题;

示例1:

var a,b;
a=b=3;
a.x = a = 4;
console.log(a,b)  // 4,3

示例2:

var a = {n:1};
var b = a;
a.x = a = {n:2};
console.log(a.x);// --> undefined
console.log(b.x);// --> { n: 2 }

示例1,说明了赋值计算是从右向左执行,“.”运算被视为变量声明,因此会优先执行;

示例2,再次印证了“.”运算的有优先计算权,并且执行的是{n:1}对象;

            然后执行从右向左执行,会给a变量赋值{n:2};

            然后执行从右向左执行,会给{n:1}对象增加一个新的属性

2)new关键字的含义

示例1:new Boolean(value)返回的是对象

       对象的创建过程(new时[[construct]]的处理逻辑)

  1. 创建一个build-in object对象p 并初始化

  2. 如果F.prototype是Object类型,则将p内部的[[prototype]]设置为F.prototype

  否则obj的[[prototype]]将为其初始值不需要指定(即Object.prototype).

  3. 将p作为this,使用args参数调用F的内部[[Call]]方法.

  3.1 内部[[Call]]方法创建当前执行上下文

  3.2 调用F的函数体

  3.3 销毁当前的执行上下文

  3.4 返回F函数体的返回值.如果F的函数体没有返回值则返回undefined

  4. 如果[[Call]]的返回值是Object类型,则返回这个值,否则返回p

示例2:Boolean(value);

value值为undefined null -0 +0 0 NAN ""下列值的时候,返回值为false,其他值外都返回true;


0人推荐
随时随地看视频
慕课网APP