js试题1
1、如何让以下代码输出111;
if(a==1 && a==2 && a==3) { console.log('111'); }
解析:访问a的时候改变a的值, if条件里是==,可隐式类型转换,
var a = { _default: 0, toString: function() { return ++this._default; } }; console.log(a==1); // true
2、如何让以下代码输出222;
if(a===1 && a===2 && a===3) { console.log('222'); }
思路:访问a的时候,
getter => 访问一个变量的时候进行拦截;
var _a = 0;
var _default = 0; Object.defineProperty(window, 'a', { get () { return ++_default; }, }) if(a===1 && a===2 && a===3) { console.log(222); }
// 222
3、var len1 = ({} + {}).length;
var len1 = ({} + {}).length; // 30 考点:隐式类型转换
({}).toString() // "[object Object]"
{} + {}; // "[object Object][object Object]"
({} + {}).length; // 30
4、var len2 = ([] + []).length; // 0
([]).toString() // '' ([] + []).toString() // '' [] + []; // '' ([] + []).length // 0
5、var len3 = (function(){}).length // 0
(function(){}).length; // 0
function test() {}
test.length; // 0
function test2(1,2,3) {
console.log(arguments.length); // arguments是实参列表}
test2.length; // 3 形参个数
test2(1,2,3,4) // console.log输出4(实参列表)