1.3 JS-类型转换

原文引用

前端面试之道-JS-类型转换

原文总结

隐式转换:当 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

复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享