题目一:
if (a == 1 & a == 2 && a == 3) {
console.log('success!');
}
请问 a?
知识点:因为== 会进行隐式类型转换,当a进行类型转换时改变值。
let a = {
_default: 0,
toString: function () {
return ++this._default ;
}
}
if (a == 1 & a == 2 && a == 3) {
console.log('success!');
}
题目二:
if (a === 1 & a === 2 && a === 3) {
console.log('success!');
}
请问 a?
知识点:
getter -> 访问一个变量后进行拦截
var _default = 0;
Object.defineProperty(window,'a',{
get(){
return ++_default;
}
})
if (a === 1 & a === 2 && a === 3) {
console.log('success!');
}
题目3:
let len1 = ({} + {}).length;
let len2 = ([] + []).length;
let len3 = (function(){}).length;
let len1 = ({} + {}).length; // 30
// +操作后下的对象会进行类型转换,会调用对象的toString() 方法
// ({}).toString() -> "[object Object]"
// ({}+{}) -> "[object Object][object Object]"
let len2 = ([] + []).length; // 0
// 调用[]的toString()
// [].tosString() -> ""
// [1,2,3].toString() -> "1,2,3"
let len3 = (function(){}).length; // 0 形参个数为0
// function 的length是指形参个数
function test(a,b,c){
}
console.log(test.length); //3 是形参的个数