var a=1;
var b=(a++)+a;
alert(b);//b=3
var a=1;
var b=(++a)+a;
alert(b);//b=4
1+{}//"1[object Object]"
2+null//2
2+undefined//NaN
"0"==false//true
isNaN(true);//false
isNaN(undefined);//true
isNaN(0/0);//true
isNaN(NaN);//true
NaN!=NaN;//true
[]!=[]//true
undefined==null;//true
-0===0//true
-0===+0//true
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
0 == null // false
1/-0===1/0;//false
new Date()+1;//是一个字符串
new Date()-1;//是一个数字
Object.setPrototypeOf(1, {}) === 1 // true
Object.setPrototypeOf('foo', {}) === 'foo' // true
Object.setPrototypeOf(true, {}) === true // true
Object.getPrototypeOf(1) === Number.prototype // true
Object.getPrototypeOf('foo') === String.prototype // true
Object.getPrototypeOf(true) === Boolean.prototype // true
var a={};
"toString" in a;//true
var a=[3,4];
3 in a;//false
1 in a;//true
const a2 = [, , ,];
0 in a2 // false
a2.length // 3
a2.map(n => 1) // [, , ,]
[]+[]//""
[]+{}//"[object Object]"
{}+[]//0
//{}被当做了代码块,只有+[],根据加法的定义,被转换为0,就得到了结果
({}) + 1//"[object Object]1"
将{}放在括号中是为了内核将其认为一个代码块
false+{}//"false[object Object]"
-2*[-1]//2
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]//sb
[].every(function (){return false});//true
[].some(function (){return true});//false
[NaN].indexOf(NaN) //-1
[NaN].findIndex(y => Object.is(NaN, y)) //0
[NaN].includes(NaN)//true
0 in [undefined, undefined, undefined] // true
0 in [, , ,] // false
Symbol.for("bar") === Symbol.for("bar")
// true
Symbol("bar") === Symbol("bar")
// false