面试题

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]
原文地址:https://www.cnblogs.com/sanerandm/p/8427934.html