JS一些操作符相关的问题收集

203 阅读1分钟

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));
}