原文引用
原文总结
隐式转换:当 JavaScript 尝试操作一个 “错误” 的数据类型时,会自动转换为 “正确” 的数据类型,也就是隐式转换。
原文的本意是列出隐式转换的几种情况,而不是主动进行类型转换的方法,主动转换的方法在本文的扩展处介绍。
原文的重点:
1.当此处原本需要一个Boolean类型的值,但为了写代码方便,通常会写入非Boolean的值来代替,此时:除了 undefined, null, false, NaN, ”, 0, -0会自动转为false,其余所有值都将转为true。
2.对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。
document.getElementById("demo").innerHTML = myVar;
myVar = {name:"Fjohn"} // toString 转换为 "[object Object]"
myVar = [1,2,3,4] // toString 转换为 "1,2,3,4"
myVar = new Date() // toString 转换为 "Fri Jul 18 2014 09:08:55 GMT+0200"
复制代码
3.四则运算符有时也会触发类型转换机制, 只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型。其他运算只要其中一方是数字,那么另一方就转为数字。记住以下几个例子即可举一反三:
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
'a' + + 'b' // -> "aNaN"
// 因为 + 'b' -> NaN
// 你也许在一些代码中看到过 + '1' -> 1
复制代码
4.如果面试时遇到面试官问及“==”相关的问题,可以直接且坚决地回答:“==”会造成很多不可控的乌龙状况,(因为状况太多,所以没必要记下来,面试官都懂的~)所以在判断值相等时,我只会用“===”,而不用“==”。
原文记忆点
-
undefined, null, false, NaN, ”, 0, -0 => false;其余=> true
-
1 + ‘1’ // ’11’
-
2 * ‘2’ // 4
-
[1, 2] + [2, 1] // ‘1,22,1’
-
+’1′ // -> 1
-
‘a’ + + ‘b’ // -> “aNaN”
-
不用==,只用===
扩展-主动(显式)类型转换
任意类型转为字符串
-
全局函数String():可用于任何类型的数字、字母、变量、表达式转换为字符串
-
.toString()函数:有此内置函数的类型转换为字符串
// 数字转字符串
// 全局String()函数
String(x) // 将变量 x 转换为字符串并返回
String(123) // 将数字 123 转换为字符串并返回
String(100 + 23) // 将数字表达式转换为字符串并返回
// Number的toString() 方法
x.toString()
(123).toString()
(100 + 23).toString()
// 其他方法
(1.111).toFixed(2) // 返回"1.11" 把数字转换为字符串,结果的小数点后有指定位数的数字
(2.222222222).toExponential(4)// 返回"2.2222e+0" 把对象的值转换为指数计数法
(123456789).toPrecision(3) // 返回"1.23e+8" 把数字格式化为指定的长度
// Boolean转字符串
// 全局String()函数
String(false) // 返回 "false"
String(true) // 返回 "true"
// Boolean 的 toString() 方法
false.toString() // 返回 "false"
true.toString() // 返回 "true"
// 日期转字符串
// 全局方法 String()
String(new Date())
// Date的toString()方法
obj = new Date()
obj.toString()
// 其他方法
obj.getDate() // 返回“17” 返回一个月中的某一天 (1 ~ 31)
obj.getDay() // 返回一周中的某一天 (0 ~ 6)
obj.getHours()// 返回小时 (0 ~ 23)
复制代码
任意类型转为数字
全局方法 Number() :可用于任何类型的数字、字母、变量、表达式转换为数字
// 字符串转数字:空字符串转换为 0;非数字字符串转换为NaN。
// Number()函数
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
// 其他方法
parseFloat('1.11') // 返回 1.11 解析一个字符串,并返回一个浮点数
parseInt('1.11')// 返回 1 解析一个字符串,并返回一个整数
var y = "5"; // y 是一个字符串
var x = + y; // x 是一个数字 一元运算符+ 可用于将变量转换为数字
// Boolean 转数字
Number(false) // 返回 0
Number(true) // 返回 1
// 日期转数字
d = new Date();
Number(d) // 返回 1404568027739
d.getTime() // 返回 1404568027739
复制代码