为什么!+ [] ='true',我无法测试'!' 以任何方式

张云海*_*张云海 3 javascript

我想知道以下运算符的逻辑

let test = ! + [];
console.log(test); //true  
Run Code Online (Sandbox Code Playgroud)

为什么?
我不能!以任何方式进行 测试

typeof ! //ERROR

! && true //ERROR
Run Code Online (Sandbox Code Playgroud)

Ade*_*lin 8

!是一个像+.
如果你要去做,typeof +你会得到同样的错误.

操作员不能那样使用.

之所以let test = ! + [];有效是因为操作顺序(运算符优先级),它确定了以下顺序:

  1. 评估[];
  2. 将其转换为数字+[] //0;
  3. 否定转换!0 //true.

因此,在expr中!+[],+[]首先被执行,这就是Quentin指向那个骗局的原因

阅读JS MDN上有关表达式和运算符的更多信息