直接上题:
题1:
var a1 = 2 > 1 > 3;
var a2 = 2 > 1 == 1;
题2:
if(1 + '3' * 5 === 16) {
console.log('通过');
} else {
console.log('不通过');
}
题3:
console.log(!!' ' + !!'' + -!!false || 'xx');
题4:
if(typeof(a) && (-true) + (+undefined) + ''){
console.log('通过');
} else {
console.log('不通过');
}
题5:
window.a || (window.a = '1')
console.log(window.a);
题6:
var x = 1,
y = z = 0;
function add(n) {
return n = n + 1;
}
y = add(x)
function add(n) {
return n = n + 3;
}
z = add(x)
console.log(x,y,z);
题7:(阿里-选择题)
// 哪个会打印1,2,3,4,5
// A
function f1(x) {
console.log(arguments);
return x
}
f1(1,2,3,4,5)
// B
function f2(x) {
console.log(arguments);
return x
}(1,2,3,4,5)
// C
(function f3(x) {
console.log(arguments);
return x
})(1,2,3,4,5)
题8:(阿里)
function b(x,y,z){
z = 10;
console.log(arguments[2]);
}
b(1,2,3)
题9:(阿里)
function foo() {
bar.apply(null,arguments)
}
function bar() {
console.log(arguments);
}
foo(1,2,3,4,5)
题10:
// 1. 打印的是什么?
console.log({} == {}); //false
// 2. 为什么不相等?
// 每一个对象都有自己的指向,比较的是地址
// 3. 怎么才能相等?
var obj = {}
var obj1 = obj
console.log(obj == obj1); // true
答案和解析在楼下...........................
题1解答:
var a1 = 2 > 1 > 3;
var a2 = 2 > 1 == 1;
console.log(a1); // false 解析: 从左到右计算: 2 > 1 返回 true , true 为 1, 1 > 3 返回false
console.log(a2); // true 解析: 从左到右计算: 2 > 1 返回 true , true 为 1, 1 == 1 返回true
题2解答:
if(1 + '3' * 5 === 16) {
console.log('通过');
} else {
console.log('不通过');
}
//结果: 通过 先算*法,'3'隐式转为3,3*5就是15, 1 + 15就是 16
题3解答:
console.log(!!' ' + !!'' + -!!false || 'xx'); // 结果为1:
console.log(!!' '); // true
console.log(!!''); // false
console.log(-!!false);// -0
console.log(!!' ' + !!'' + -!!false);
// 解析 首先 !!' ' 为true转换为1, !!'' 为false转换为0, -!!false为-0
// 1 + 0 + -0 为 1
// 1 || 'xx' 返回1
题4解答:
if(typeof(a) && (-true) + (+undefined) + ''){
console.log('通过'); // 通过
} else {
console.log('不通过');
}
console.log(typeof(a)); // typeof(a) 不会报错,而是返回字符串的undefined,
console.log((-true)); // true转换为1,-true为-1
console.log((+undefined)); // NaN
console.log((-true) + (+undefined) + ''); // 为字符串的NaN
// 结果: 通过
// 解析: if('undefined' && 'NaN') { 是可以通过的 }
题5解答:
window.a || (window.a = '1')
console.log(window.a);
// 结果: 1 解析: ()的优先级是最高的,先解析()中的代码,这时window.a赋值为'1', 再走||运算,
发现window.a的值为1,直接返回1
题6解答:
var x = 1,
y = z = 0;
function add(n) {
return n = n + 1;
}
y = add(x)
function add(n) {
return n = n + 3;
}
z = add(x)
console.log(x,y,z); // 1,4,4 同名函数会覆盖,哈哈哈
题7解答:
// 哪个会打印1,2,3,4,5
// A
function f1(x) {
console.log(arguments);
return x
}
f1(1,2,3,4,5) // 执行
// B
function f2(x) {
console.log(arguments);
return x
}(1,2,3,4,5) //不执行,函数声明后边不能跟调用,语法错误,()什么不填会报错,()填内容不执行,也不报错
// C
(function f3(x) {
console.log(arguments);
return x
})(1,2,3,4,5) // 执行
题8解答:
function b(x,y,z){
z = 10;
console.log(arguments[2]); //10 arguments代表实参. 实参赋值,形参跟着变化,映射关系
}
b(1,2,3)
题9解答:
function foo() {
bar.apply(null,arguments) // 没有this指向的问题,只传了参数
// 同上
// bar(arguments) 这里隐式bar.call(arguments)
}
function bar() {
console.log(arguments); // [1,2,3,4,5]
}
foo(1,2,3,4,5)