Open jangdelong opened 5 years ago
一、字符连接符【转字符串】
即字符串连接操作,一般以“+”号来进行连接,在隐式转换时容易跟算术运算符的“+”号混淆,算术运算符“+”在后面的节点中会具体再介绍,本节点主要是列举一些常见的不同类型数据隐式转换成字符串连接的例子。
console.log('abc' + 1); // 输出:'abc1'
console.log('abc' + 234); // 输出:'abc234'
console.log('abc' + true); // 输出:'abctrue'
console.log('abc' + false); // 输出:'abcfalse'
console.log('abc' + undefined); // 输出:'abcundefined'
console.log('abc' + null); 输出: 'abcnull'
小结:1-4你会发现一个规律,只要一边为字符串类型,结果都会转成字符串类型,如果说这个比较好理解,那么接下来的可能会稍微有点难理解,就是两边都不是字符串类型的数据,但结果会转成字符串类型。
console.log([] + []); // 输出:'' ,即空字符串
console.log([ 1, 2, 3, 4 ] + [ 5, 6, 777 ]); // 输出:'1,2,3,45,6,777'
console.log({} + {}); // 输出:'[object Object][object Object]'
console.log({ name: 'Jelon' } + { name: 'Huozhi' }); // 输出:'[object Object][object Object]'
console.log({} + { name: 'Jelon' }); // 输出:'[object Object][object Object]'
console.log([] + { name: 'Jelon' }); // 输出:'[object Object]'
console.log([ 1, 2, 3 ] + { name: 'Jelon' }); // 输出:'1,2,3[object Object]'
console.log([] + null); // 输出:'null'
console.log([ 1, 2, 3 ] + null); // 输出:1,2,3null
console.log(null + {}); // 输出:'null[object Object]'
console.log(null + { name: 'Jelon' }); // 输出:'null[object Object]'
console.log(undefined + {}); // 输出:'undefined[object Object]'
console.log(undefined + { name: 'Jelon' }); // 输出:'undefined[object Object]'
console.log(undefined + [1, 2, 3]); // 输出:'undefined1,2,3'
console.log([1, 2, 3] + undefined); // 输出:'1,2,3undefined'
console.log(1 + [ 2, 3 ]); // 输出:'12,3'
console.log([] + 123); // 输出:'123'
console.log(true + []); // 输出:'true'
console.log(1 + { name: 'Jelon' }); // 输出:'1[object Object]'
console.log(123 + {}); // 输出:'123[object Object]'
console.log(true + {}); // 输出:'true[object Object]'
小结:5-13你会发现一个规律,那就是任意一个数据类型 + 数组/对象,结果都会隐式转换为字符串类型;对于任意数据类型 + 对象,顺序是不可逆。
二、算术运算符“+”【转数字类型】
console.log(1 + true); // 输出:2
console.log(false + 1); // 输出:2
console.log(1 + null); // 输出:1
console.log({} + 4); // 输出:4
console.log({ name: 'Jelon' } + 4); // 输出:4
console.log({} + null); // 输出:0
console.log(true + true); // 输出:2
console.log(false + false); // 输出:0
console.log(true + null); // 输出:1
console.log(null + false); // 输出:0
三、其他运算符
console.log(~undefined); // 输出: -1
console.log(~~undefined); // 输出: 0
console.log(~false); // 输出: -1
console.log(~~false); // 输出: 0
console.log(~true); // 输出:-2
console.log(~~true); // 输出:1
console.log(~'10'); // 输出:-11
console.log(~~'10'); // 输出:10
js类型隐式转换坑点