js中一元运算符值得转换

267 阅读1分钟

console.log([] + []) // '' console.log([] + {}) // [object Object]console.log({} + {}) // [object Object][object Object]console.log(+ []) // 0 

在JS中做一元操作符时,会先转换为原始类型 string  number undefind null boolean ;

非原始类型会调用toPrimitive内部运算 

toPrimitive(value,preferdType) preferdType 取值是number string defalut 

 当取值是number的时候 

 判断value是否为原始类型  是的话直接返回 否则调用valueOf() 如果能得到原始类型 则返回,否则调用toString()


当取值为string的时候

上面的2 3 步相反


当取值为defalut的时候  默认defalut是number 所以跟number的时候是一样的


运算符其中一个是字符串 那么 两边都需要转换为字符串 然后做拼接的操作 反正其中一个是字符串 就会做拼接的操作

console.log('12'+1);            // 121
console.log('abc'+'def');       // abcdef
console.log('1'+true);          //1true
console.log('1'+undefined);     //1undefined
console.log('1'+null);          //1null

运算符其中一是数字 则进行相加操作

console.log(1+1);            // 2
console.log(1+'def');       // 1def
console.log(1+true);          //2
console.log(1+undefined);     //NaN
console.log(1+null);  

当都是原始类型进行相加操作,那么都会转换为数字

console.log(true+true);             // 2
console.log(true+null);             // 1
console.log(true+undefined);        //NaN
console.log(undefined+null);        //NaN
console.log(undefined+undefined);   //NaN
console.log(null+null);            //0


一元加号运算时,唯一的运算元相当于强制求出数字值的Number([])运算。

console.log(+[]);     // 0
console.log(+{});     // NaN
console.log(+null);     //0
console.log(+true);     //1
console.log(+undefined);     //NaN