JavaScript基础学习心得05

强制类型转换

  1. Number()
  2. String()
  3. Boolean()

Number()

举一些需要记的:

// 字符串:如果不可以被解析为数值,返回 NaN
Number(‘324abc’) // NaN

// 空字符串转为0
Number(‘’) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

parseInt和Number

  • 不同之处:
    parseInt逐个解析字符
    Number函数整体转换字符串的类型
parseInt(’42 cats’) // 42
Number(’42 cats’) // NaN
  • 相同之处:
    都会过滤字符串前后空格

Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组:

Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

先调用valueOf,然后调用toString

如果想让对象做参数时不返回NaN,要怎么做?

  1. 重写valueOf方法,让其返回原始类型值;
  2. 重写toString,让其返回原始类型值;
  3. 如果都改了的话,前者优先于后者。

String()

String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式:

String({a: 1}) // “[object Object]”
String([1, 2, 3]) // “1,2,3”

先调用toString,然后调用valueOf

重定义两个方法会有什么效果?

String({
  toString: function () {
    return 3;
  }
})
// “3”

String({
  valueOf: function () {
    return 2;
  }
})
// “[object Object]”

String({
  valueOf: function () {
    return 2;
  },
  toString: function () {
    return 3;
  }
})
// “3”

Boolean()

对象的布尔值都为true

Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean(‘’) // false

Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true

将表达式变成布尔值

// 写法一
expression ? true : false

// 写法二
!! expression

一元运算符会把运算子转成数值:

+’abc’ // NaN
-‘abc’ // NaN
+true // 1
-false // 0
原文地址:https://www.cnblogs.com/endymion/p/9199217.html