1 + [] = "1"
今天小菜在codewars刷题的时候看到一个很简单的题目:
就是把数字转化为字符串。
相信很多人脑海中马上就出来了很多答案:
String()、toString()、直接加个空字符串都是可以的。
虽然是一个很简单的题目,但是答案区的大佬们总能给出各种奇奇怪怪的回答,其中就有一个是这样回答的:
function numberToString(num) { return num + [] + [] }
当我看到这个答案之后也是有一些惊讶的,果然再简单的题对于有些大佬来说也是可以玩的很花的,哈哈。
小菜看到这个答案马上就去百度了一下,得到的结论是这样的,在这里和大家分享一下:
js在进行运算时,如果遇到不能计算的单位,就会进行默认转换;
隐式转换过程: 首先 [] 调用 valueOf() 方法,得到的还是 [],然后调用 toString() 方法,得到 “”;
并且+和-以及其他一些运算符不同,+会默认往字符串转化,而-,*等就会默认往数字转化,写几个例子对比下就清楚了:
// +
console.log([] + []); // => "" + "" => ""
console.log(1 + []); // => 1 + "" => "1"
console.log(1 + [2]); // => 1 + "2" => "12"
console.log([1, 2] + [3, 4]); // => "1,2" + "3,4" => "1,23,4"
在-,*运算中[]被转化为数字0
// -
console.log([] - []); // 0 - 0 = 0
console.log(1 - []); // 1 - 0 = 0
console.log(1 - [2]); // 1 - 2 = 0
console.log(1 - [3, 4]); // NaN
console.log([1,2] - [3,4]); // NaN
// *
console.log([] * []); // 0 * 0 = 0
console.log(1 * []); // 1 * 0 = 0
console.log(1 * [2]); // 1 * 2 = 2
console.log(1 * [3, 4]); // NaN
console.log([1,2] * [3,4]); // NaN
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。