前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js 2个空数组相加会得到一个空字符串

js 2个空数组相加会得到一个空字符串

原创
作者头像
IT工作者
发布2022-05-13 11:01:57
1K0
发布2022-05-13 11:01:57
举报
文章被收录于专栏:程序技术知识
代码语言:javascript
复制
1 + [] = "1"

今天小菜在codewars刷题的时候看到一个很简单的题目:

就是把数字转化为字符串。

相信很多人脑海中马上就出来了很多答案:

String()、toString()、直接加个空字符串都是可以的。

虽然是一个很简单的题目,但是答案区的大佬们总能给出各种奇奇怪怪的回答,其中就有一个是这样回答的:

代码语言:javascript
复制
function numberToString(num) { return num + [] + [] }

当我看到这个答案之后也是有一些惊讶的,果然再简单的题对于有些大佬来说也是可以玩的很花的,哈哈。

小菜看到这个答案马上就去百度了一下,得到的结论是这样的,在这里和大家分享一下:

js在进行运算时,如果遇到不能计算的单位,就会进行默认转换;

隐式转换过程: 首先 [] 调用 valueOf() 方法,得到的还是 [],然后调用 toString() 方法,得到 “”;

并且+和-以及其他一些运算符不同,+会默认往字符串转化,而-,*等就会默认往数字转化,写几个例子对比下就清楚了:

代码语言:javascript
复制
// +
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

代码语言:javascript
复制
// -
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档