1.What is the result of this expression? (or multiple ones)
题目:
3.toString()
3..toString()
3...toString()
答案: error, “3”, error
解析:
虽然JavaScript会在调用方法时对原始值进行包装,但是这个点是小数点呢、还是方法调用的点呢,于是乎第一个就是error了,因为JavaScript解释器会将其认为是小数点。
而第二个则很好说通了,第一个点解释为小数点,变成了(3.0).toString(),结果就是”3”
第三个也是,第一个点为小数点,第二个是方法调用的点,但是后面接的不是一个合法的方法名,于是乎就error了
2.What is the result of this expression? (or multiple ones)
题目:
(function(){
var x = y = 1;
})();
console.log(y);
console.log(x);
答案:1, error
解析:
变量提升和隐式定义全局变量,x变量提升但是函数局部变量,隐式定义了y这个全局变量
3.What is the result of this expression? (or multiple ones)
题目:
var a = /123/,
b = /123/;
a == b
a === b
答案:false, false
解析:
console.log(typeof /123/);是object,正则表达式是对象,所以==左右两边是对象时,是判断二者是否指向同一个对象,则是false
4.What is the result of this expression? (or multiple ones)
题目:
var a = [1, 2, 3],
b = [1, 2, 3],
c = [1, 2, 4]
a == b
a === b
a > c
a < c
答案:false, false, false, true
解析:
typeof a和b都是object,所以前两个也是false,而JavaScript中Array的’>’运算符和’<’运算符的比较方式类似于字符串比较字典序,会从第一个元素开始进行比较,如果一样比较第二个,还一样就比较第三个,如此类推,所以第三个结果为false,第四个为true。
5.What is the result of this expression? (or multiple ones)
几个原型链的题目
题目:
var a = {}, b = Object.prototype;
[a.prototype === b, Object.getPrototypeOf(a) === b]
答案:
false,true
解析:
原型链:
构造函数:有一个指向原型对象的指针prototype
原型对象:有一个指向构造函数的指针constructor
实例:有一个指向原型对象的内部指针[[prototype]]
a是对象实例,有内部指针[[prototype]],但是没有指针prototype
实例和原型之间,实例中无法访问[[prototype]],一般确定实例和原型之间确定关系是用:isPrototypeOf()和getPrototypeOf()
题目:
function f() {}
var a = f.prototype, b = Object.getPrototypeOf(f);
a === b
答案:
false
解析:
Object.getPrototypeOf(f)是找到f.[[prototye]],和f.prototype不同,因此是false