JavaScript 中有两种类型转换:隐式类型转换和显式类型转换。
隐式类型转换指 JavaScript 在运行时自动将一种类型转换为另一种类型。例如,在数学运算中,JavaScript 会将字符串转换为数字。
显式类型转换指在代码中使用内置函数或全局对象将一种类型显式地转换为另一种类型。例如,使用 Number() 函数将字符串转换为数字,使用 String() 函数将数字转换为字符串。
另外,JavaScript 还提供了一些常用的类型转换函数,如 parseInt() 和 parseFloat() 用于将字符串转换为整数和浮点数。
还有一些其它的方法来进行类型转换,如:
-
使用
+
运算符将字符串转换为数字 -
使用
valueOf()
方法将对象转换为原始类型 -
使用
toString()
方法将数字、布尔值、对象转换为字符串
需要注意的是,在 JavaScript 中使用 == 运算符进行比较时会发生隐式类型转换,而使用 === 运算符进行比较时不会发生类型转换,所以在比较值的相等性时建议使用 === 运算符。
需要注意的是,JavaScript 的类型转换有一些需要特别注意的地方:
- 当一个值被赋值给另一个变量时,它会被隐式地转换为该变量的数据类型。
- 当一个值用于布尔运算时,它会被隐式地转换为布尔值。
- 当一个值用于数学运算时,它会被隐式地转换为数字。
- 当一个值被作为字符串连接时,它会被隐式地转换为字符串。
- 当一个值被作为对象的属性时,它会被隐式地转换为字符串。
以下是一些 JavaScript 类型转换的示例:
1、隐式类型转换:
let num = "42";
console.log(num + 2); // "422"
2、显式类型转换:
let num = "42";
console.log(Number(num) + 2); // 44
3、parseInt() 和 parseFloat() 函数转换:
console.log(parseInt("42", 10)); // 42
console.log(parseFloat("3.14")); // 3.14
4、toString() 函数转换:
console.log((42).toString()); // "42"
console.log((true).toString()); // "true"
5、布尔值转换:
console.log(Boolean(0)); // false
console.log(Boolean("hello")); // true
6、运算符转换:
console.log(+"42") // 42
7、使用 Object()
函数将原始类型转换为对象:
console.log(typeof Object(42)); // object
8、使用 Symbol()
函数将字符串转换为 Symbol 类型:
console.log(typeof Symbol("hello")); // symbol
9、使用 JSON.parse()
和 JSON.stringify()
函数将字符串转换为对象和对象转换为字符串:
let jsonString = '{"name":"John","age":30}';
let obj = JSON.parse(jsonString);
console.log(obj); // { name: 'John', age: 30 }
let jsonString2 = JSON.stringify(obj);
console.log(jsonString2); // '{"name":"John","age":30}'
需要注意的是,上述类型转换方式需要满足一定的条件,需要注意数据的合法性,如 JSON.parse() 和 JSON.stringify() 方法只能解析和序列化 JSON 格式的字符串。
还有一些需要注意的地方:
-
当使用 parseInt() 和 parseFloat() 方法将字符串转换为数字时,如果字符串不符合数字格式,则会返回 NaN,因此需要使用 isNaN() 函数判断转换结果是否为 NaN。
-
当使用 JSON.parse() 方法将字符串转换为对象时,如果字符串不符合 JSON 格式,则会抛出错误。
-
当使用
Symbol()
函数将字符串转换为 Symbol 类型时,在内部存储的是一个符号,不是字符串。因此,当比较两个 Symbol 类型的值时,它们只有在内存中的地址相同时才相等。 -
当使用
Object()
函数将原始类型转换为对象时,会创建一个包装对象。因此,在使用包装对象时需要注意包装对象和原始值之间的差异。
在使用类型转换时,需要根据实际需求进行选择,并且要注意隐式类型转换的影响。