类型转化
最新的 ECMAscript 标准定义了7种数据类型
原始类型:Boolean、Null、Undefined、Number、String、Symbol「ES6 新增」 对象:Object
数据类型
显式类型转换 「手动执行」
Number 函数
1. 原始类型转换 - 数值:转换后还是原来的值。 - 字符串:如果可以被解析为数值,则转换为相应的数值,负责得到 NaN。空字符串转为 0。 - 布尔值:ture 转为 1,false 转为 0。 - undefined:转为NaN。 - null:转成 0。 2. 对象类型转化 - 先调用对象自身的 valueOf 方法,如果该方法返回原始类型的值「数值、字符串和布尔值」,则直接对该值使用 Number 方法,不再进行后续步骤。 - 如果 valueOf 方法返回符合类型的值,再调用对象自身的 toString 方法,如果 toString 方法返回原始类型的值,则对该值使用 Number 方法,不再进行后续步骤。如果 toString 方法返回复合类型的值,则报错。
String 函数
1. 原始类型转换 - 数值:转为相应的字符串。 - 字符串:转换后还是原来的值。 - 布尔值:ture 转为「ture」,false 转为「false」。 - undefined:转为「undefined」。 - null:转为「null」。 2. 对象类型转化
Boolean 函数
1. 原始类型转换 - undefined: - null: - -0: - +0: - NaN: - ''空字符串 - 以上全部转化为 false,其他都转换为 ture。 2. 对象类型转化 - 先调用对象自身的 toString 方法,如果该方法返回原始类型的值,则直接对该值使用 String 方法,不再进行后续步骤。 - 如果 toString 方法返回符合类型的值,再调用对象自身的 valueOf 方法,如果 valueOf 方法返回原始类型的值,则对该值使用 String 方法,不再进行后续步骤。如果 valueOf 方法返回复合类型的值,则报错。
隐式类型转换 「程序内部执行」
- 四则运算
- 判断语句
- Native 调用「alert、console.log」
typeof
表达式 | 返回值 |
---|---|
typeof undefined | 'undefined' |
typeof null | 'object' |
typeof true | 'boolean' |
typeof 123 | 'number' |
typeof "abc" | 'string' |
typeof function() {} | 'function' |
typeof {} | 'object' |
typeof [] | 'object' |
typeof unknownVariable | 'undefined' |
实例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>类型转换</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="main.js"></script>
</head>
<body>
<script type="text/javascript">
// Number 函数:转换成数值
// 转化后还是原来的值
console.log(Number(324)); // 324
// 如果可以被解析为数值,则转换为相应的数值,负责得到 NaN。空字符串转为 0。
console.log(Number("324")); // 3224
console.log(Number("324abc")); // NaN
console.log(Number("")); // 0
// ture 转为 1,false 转为 0。
console.log(Number(false)); // 0
// 转为NaN
console.log(Number(undefined)); // NaN
// 转为0
console.log(Number(null)); // 0
var a = {
a: 1
}
console.log('a', Number({
a: 1
}));
</script>
<script type="text/javascript">
//String 函数
// 数值:转为相应的字符串。
console.log(String(123)); // "123"
// 字符串:转换后还是原来的值。
console.log(String("abc")); // "abc"
// 布尔值:ture 转为「ture」,false 转为「false」。
console.log(String(true)); // "true"
// undefined:转为「undefined」。
console.log(String(undefined)); // "undefined"
// null:转为「null」。
console.log(String(null)); // "null"
var b = {
b: 1,
toString: function () {
return {
b: 2,
};
},
valueOf: function () {
return 'b';
},
};
console.log('b', String(b));
</script>
<script type="text/javascript">
// 以下六个值的转化结果为false,其他的值全部为true。
// undefined
// null
// -0
// +0
// NaN
// ''(空字符串)
console.log(Boolean(undefined)); // false
console.log(Boolean(null)); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean('')); // false
var b = {
b: 1,
toString: function () {
return {
b: 2,
};
},
valueOf: function () {
return 'b';
},
};
console.log('b', String(b));
</script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。