1、你对面向对象的理解
2、你对进程理解
3、你对原型对象理解
4、json对象和json协议的区别
5、怎样检测数据类型?
type of
有什么缺陷?
无法区分 {} [] , 都显示object
怎么解决?
tostring.call()
instance of
constructor ===
6、考查点:变量声明提升问题,先声明变量然后是函数。
1 alert(a); // funciton a (){alert(10)} 2 a(); //10 3 var a = 3; 4 function a() { 5 alert(10); 6 } 7 alert(a); //3 8 a=6; 9 a();//error a is not a function
7、知识点考察:
原型属性为所有实例共享
他们修改的是同一片内存空间
1 var fun = function(){}; 2 fun.prototype = { 3 info{ 4 name: 'peter', 5 age: 25 6 } 7 } 8 var a = new fun(); 9 var b = new fun(); 10 a.info.name = 'jack'; 11 b.info.name = 'tom'; 12 console.log(a.info.name); 13 console.log(b.info.name);
8、知识点考察:引用类型 值类型
1 var a = {"x": 1}; 2 var b = a; 3 a.x = 2; 4 console.log(b.x); //2
解析:将a赋值给b b保存的只是地址,也就是a变量,b变量指向同一个对象;修改a.x 同时也修改了b.x -- 因为修改的都是一块内存区域
1 var a = {"x": 1}; 2 var b = a; 3 a.x = 2; 4 console.log(b.x);//2 5 a = {"x": 3}; 6 console.log(b.x) //2
解析:这里又定义了一个新的对象,重新分配内存,这个时候a变量中存储的是新地址,而b指向的还是老对象。
1 var a = {"x": 1}; 2 var b = a; 3 a.x = 2; 4 console.log(b.x);//2 5 a = {"x": 3}; 6 console.log(b.x) //2 7 8 a.x = 4; 9 console.log(b.x);//2
解析:新对象值改变不会影响b,他们两个已经是完全没有关系的对象。互不影响。
9、赋值运算顺序依循“从右往左”的规则,而 . 运算符最先计算,一开始js已经先计算了a.x,便已经解析了这个a.x是对象A的x,所以在同一条公式的情况下再回来给a.x赋值,也不会说重新解析这个a.x为对象B的x。所以 a.x=a 应理解为对象A的属性x指向了对象B:
1 var a = {n:1}; 2 var b = a; 3 a.x = a = {n:2}; 4 console.log(a.x);// --> undefined 5 console.log(b.x);// --> [object Object]