总结:不常用的javascript细节
发布于 8 年前 作者 FantasyGao 3082 次浏览 来自 分享

javascript 细节

> a=1;b=(a++)+a;console.log(b);   //3
 a++表达式在运算的时候是未经运算的,而后面的a是经过运算的,所以结果是b=1+2=3;
> a = 1+{};  console.log(a);   //"1[object Object]"
在经过+链接之后,{}被转化为"[object Object]",然后进行与1连接。
> true+true //2
 true被转化为1,1+1=2.
> 2+null  //2
 经过+null转化为0 2+0=2.
> 2+undefined   //NAN
 经过+undefined转化为NAN 2+NAN=NAN
> 6>>1 //3
 十进制的7转化为2进制110,右移动1位为011(高位补0),结果转10进制为3.
> var o={x:1};console.log(o&&o.x)   //1
 {x;1}&&1结果为真,最后返回&&后面的内容  o.x=1 
> if(x==y) stop(); 与 (x==y)&&stop(); 是否相同。  
 相同 ,&&与运算符会先判断左边的内容根据其结果决定是否执行右边的内容。
> var a=[1,3]; var i = 0;a[i++]*=2; //a[0]=2;a[1]=3;
 a[i++]取到的还是a[i]并非a[i++];所以结果只改变a[0]*=2;a[0]=1*2=2
> var a=[1,3]; var i = 0;a[i++]=a[i++]*2;   //a[0]=6;a[1]=3;
 在经过a[i++]时i已经加1,等号右边成a[1]*2,结果3*2=6;如果最后打印i,已经是2

之后会在github更新: https://github.com/FantasyGao/About_Node/blob/master/javascript.md

5 回复

可是,正常写程序的人,好像基本不会这么用吧?

这种细节很蛋疼,虽然平常不会用,但是要是出现bug就很蛋疼

@ilovedesert001 确实这样,所以容易忽视语言本身的一些细节。

es6可以hook Symbol.toPrimitive

回到顶部