1. 以下代码输出什么?
let num = 0;
let num2 = 1;
let str = '2hello';
let str2 = '02';
let bool = true;
let arr = [1, 2, 3];
let float = 1.1;
let float2 = 2.1;
let obj = {
name: 'wyt',
valueOf: function() {
return -1;
}
};
console.log(num++);
console.log(++num);
console.log(num);
console.log(++num2 + num2);
console.log(++str);
console.log(++str2);
console.log(bool--);
console.log(arr++);
console.log(--float);
console.log(--float2);
console.log(obj--);
输出: 0, 2, 2, 4, NaN, 3, 1, NaN, 0.10000000000000009, 1.1, -1
2. 以下代码输出什么?
let a = null;
let b = undefined;
console.log(++a);
console.log(++b);
console.log(++null);
输出: 1, NaN, // 报错 Uncaught SyntaxError
3. 以下代码输出什么?
console.log(true || wyt);
console.log(!Infinity);
let num = 1;
console.log(--num && 8);
let num2 = 0;
console.log(++num2 && 8);
console.log(true || false && false);
console.log(true && wyt);
输出: true, false, 0, 8, true, 报错 ReferenceError:wyt is not defined
4. 以下代码输出什么?
console.log(NaN * 0);
console.log(Infinity * 0);
console.log(Infinity * 1);
console.log(Infinity * Infinity);
console.log(Infinity / Infinity);
console.log(0 / 0);
console.log(10 / 0);
输出: NaN, NaN, Infinity, Infinity, NaN, NaN, Infinity
5. 写累了,问题同上0.0
console.log(Infinity + Infinity);
console.log(-Infinity + -Infinity);
console.log(Infinity + -Infinity);
console.log(-0 + -0);
console.log(+0 + +0);
console.log(+0 + -0);
console.log(1 + undefined);
console.log(1 + {});
console.log(1 + []);
console.log(typeof 1 + []);
console.log([1, 2] + [2, 1]);
console.log('a' + + 'b');
console.log('a' + + '2');
输出: Infinity, -Infinity, NaN, -0, 0, 0, NaN, '1[object Object]', '1', 'number', '1,22,1', 'aNaN', 'a2'
6. 同上
console.log(Infinity - Infinity);
console.log(-Infinity - -Infinity);
console.log(Infinity - -Infinity);
console.log(-Infinity - Infinity);
console.log(-0 - -0);
console.log(+0 - +0);
console.log(-0 - +0);
console.log(1 - {});
console.log(1 - []);
console.log(typeof (1 - []));
输出: NaN, NaN, Infinity, -Infinity, 0, 0, -0, NaN, 1, 'number'
7. 。。。
console.log('Blue' < 'aliceblue');
console.log('23' < '3');
console.log('23' < 3);
console.log('a' < 3);
console.log(NaN > 3);
console.log(NaN <= 3);
console.log({} < {});
console.log({} > {});
console.log({} <= {});
console.log({} >= {});
输出: true, true, false, false, false, false, false, false, true, true
8. 。。。
console.log(NaN == NaN);
console.log(NaN != NaN);
console.log({} == !{});
console.log({} == {});
console.log(null == undefined);
console.log(undefined == 0);
console.log(undefined == 'undefined');
console.log(null == 0);
输出: false, true, false, false, true, false, false, false
9. 。。。
console.log((1, 2, 4, 6, 8));
输出: 8
10.其他问题
console.log(++[[]][+[]]+[+[]]);
console.log([] != []);
console.log([] == ![]);
console.log(false && true || false && true)
如何让a == 1 && a == 2 && a == 3返回true?
输出: '10', true, true, false
<!--// [] 转成 true,然后取反变成 false-->
<!--[] == false-->
<!--[] == ToNumber(false)-->
<!--[] == 0-->
<!--ToPrimitive([]) == 0-->
<!--// [].toString() -> ''-->
<!--'' == 0-->
<!--0 == 0 // -> true-->
11. 用位操作符实现加减(整数情况下)
<!--加法-->
function add (a, b) {
let carry, num;
do {
num = a ^ b;
carry = (a & b) << 1;
a = num;
b = carry;
} while (carry != 0);
return num;
}
<!--减法-->
function subtract (a, b) {
return add(a, add(~b, 1));
}