技巧多变,别具一格:巧用~~符号,轻松转换数据类型!
2023-11-14 10:38:51
~~符号,在 JavaScript 中,它是一个按位取反运算符,作用是将一个变量的底层数组取反。这意味着,它将数组中所有为0的元素变成1,所有为1的元素变成0。
这种运算符通常用于对布尔值进行取反,因为布尔值本质上就是0和1的组合。例如,我们可以使用~~运算符将true转换成false,将false转换成true。
然而,~~运算符的妙用远不止于此。它还可以用于将非数字类型数据转换成数字类型。
一、巧用~~符号将字符串转换成数字
const str = '123';
console.log(~~str); // 输出:123
在上面的示例中,我们使用运算符将字符串'123'转换成了数字123。这是因为,字符串'123'的底层数组是[49, 50, 51],分别对应字符'1'、'2'和'3'的Unicode编码。当我们使用运算符对这个数组进行取反后,它变成了[10100111, 10100100, 10100011],正好是数字123的二进制表示。
二、巧用~~符号将布尔值转换成数字
const bool = true;
console.log(~~bool); // 输出:1
在上面的示例中,我们使用运算符将布尔值true转换成了数字1。这是因为,布尔值true的底层数组是[1],而运算符将这个数组取反后变成了[11111111],正好是数字1的二进制表示。
类似地,我们可以使用~~运算符将布尔值false转换成数字0。
三、巧用~~符号将null和undefined转换成数字
const nullValue = null;
const undefinedValue = undefined;
console.log(~~nullValue); // 输出:0
console.log(~~undefinedValue); // 输出:0
在上面的示例中,我们使用运算符将null和undefined分别转换成了数字0。这是因为,null和undefined的底层数组都是空的,当运算符对它们进行取反后,仍然是空的,正好是数字0的二进制表示。
注意事项
需要指出的是,运算符在某些情况下可能会导致意外的结果。例如,当我们使用运算符将字符串'abc'转换成数字时,它会输出一个错误值NaN(Not a Number)。这是因为,字符串'abc'的底层数组是[97, 98, 99],当~~运算符对这个数组进行取反后,它变成了[1100001, 1100010, 1100011],这是无效的二进制表示。
因此,在使用~~运算符进行数据类型转换时,我们需要特别注意数据的类型,以避免出现意外的结果。