后端使用node.js+express框架返回数据,代码均无错误,经查询发现是因为前端接收数据的时候
axios.get(`http://localhost:4000/search/users?q=${keyword}`).
then((response) => { console.log('data:'+response.data.items) ;
this.props.saveUsers(response.data.items)},
(err) => { console.log('err' + err.message) })
}
其中'data:'+response.data.items中字符串与json数据一起使用,+号存在着隐式转换,+号两边只要有一端是字符串,就会调用toString()将其拼接成为字符串,造成了打印的错误。
查看其他文章时发现,数字+布尔值(布尔值true会被转换为1,false会被转换为0)进行计算;一旦有字符串在旁边,则统一拼接为字符串。
引申:除了数字以外的其他类型使用+,也会被统一隐式转换
let test=[1,2,3]+[4,5,6];
console.log(test);// 1,2,34,5,6
console.log(typeof test);// string
具体来说,应该参照:
- 当一侧为
String
类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型。 - 当一侧为
Number
类型,另一侧为原始类型,则将原始类型转换为Number
类型。 - 当一侧为
Number
类型,另一侧为引用类型,将引用类型和Number
类型转换成字符串后拼接。 - 两侧都为引用类型,转换为字符串拼接。
- 以上 4点,优先级从高到低