CNode

总结:不常用的javascript细节

分享
FFantasyGao发布于9 年前最后回复9 年前5 回复3579 浏览0 收藏

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)

T
Tong-Huang#1·9 年前

Mark

I
ilovedesert001#2·9 年前

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

N
NetLogoclub#3·9 年前

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

F
FantasyGao#4·9 年前
引用 ilovedesert001可是,正常写程序的人,好像基本不会这么用吧?

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

M
Matrixbirds#5·9 年前

es6可以hook Symbol.toPrimitive

参与回复
登录后即可参与回复。登录