null 与 undefined

  1. null == undefined // true
  2. //转字符串时
  3. undefined + '' // 'undefined' 转为字符串undefined
  4. null + '' // 'null' 转为字符串null
  5. // 转为数字时
  6. undefined + 0 // NaN 转数字会变成NaN
  7. null + 0 // 0 转数字变成0
  8. // 转布尔值都为false

无论在什么情况下都没有必要将变量显式声明为undefined,,如果需要定义某个变量在保存将来的要使用的对象可以用null

Boolean类型

String 转 Boolean时空字符串为false, 非空为true
Number转Boolean时0和NaN为false,其他为true,包括正负无穷大
Object转Boolean时null为false,其他为true
Function转Boolean时都为true
null和undefined转为Boolean都为false

Number类型

Boolean类型转Number时true为1,false为0
Null类型转Number为0
undefined转Number为NaN
String转Number,纯数字字符串直接转, 空字符串转为0,其他内容为NaN
Object转Number会先调valueOf方法转完如果是个NaN就调toString方法转完如果是NaN结果就是NaN

parseInt() 函数

  1. parseInt(string, radix) // radix的范围为2-36, 超出范围或是不符合指定进制的字符串会被转为NaN, 即无法被转化的都为NaN
  2. parseInt('4.99') // 4 对于浮点数是直接对小数点进行省略的, 因为在parseInt中小数点为非数字符号,+-是

parseFloat() 函数

将字符串转为浮点数,没有进制的概念

isNaN 与 Number.isNaN

isNaN函数在判断是否为NaN时需要先进行数据类型转换,只有在无法转换为数字时才会返回true(传入的值不能转成数字才为NaN)
Number.isNaN函数在判断是否为NaN时,只需要判断传入的值是否为NaN,并不会进行数据类型转换(只有传入NaN才会返回true)

运算符

等于运算符

双等运算符在比较时,会将两端的变量进行隐式类型转换,然后在比较大小
三等运算符在比较时,会优先比较数据类型,数据类型相同才会去判断值的大小,如果类型不同则直接会返回false

双等时的转换:
  • undefined == null
  • 字符串跟数字比的时候字符串会转成数字再去比
  • 布尔值跟数字比的时候布尔值会转成数字再去比
  • 对象跟数字比的时候会先调用valueOf函数或是toString函数

    +时的转换:
  • 字符串跟number,boolean,null,undefined相加时会转成字符串拼接

  • 数字跟boolean,null, undefined相加时会根据隐式转换规则转成数字或NaN进行运算

    typeof

    typeof对于基本数据类型除了null都可以返回对应的类型如:undefined, number,string,boolean,symbol。引用数据类型除了function可以返回对应类型其他都返回object
    typeof null 为什么等于object
    因为在javascript设计之初每种数据类型都会使用3bit表示,000表示Object类型,而null表示的是空指针,大多数平台中的值为0x00,因此null类型标签就成了0,所以使用typeof运算符时会判断为object类型返回’object’

    逗号分隔

    多个表达式执行可以使用逗号分隔符, 所有运算符中逗号运算符的优先级是最低的

    引用类型转String|Number

    转String会先去调这个引用类型本身的toString方法,如果它返回的是一个原始值,则会将这个原始值转为字符串表示,并返回这个字符串,如果改引用类型本身没有toString方法或是toString方法本身返回的不是一个基本数据类型则会去调valueOf方法,如果valueOf方法返回的也不是一个基本数据类型就会抛出类型转换异常
    转Number则是先去调用valueOf方法如果返回的不是基本数据类型才去调toString方法,都不行就抛出类型转换异常

普通对象的toString返回的是’[object Object]’,valueOf方法返回的数据本身
数组的toString返回的是元素逗号分隔的字符串, valueOf方法返回的是数据本身
函数的toString返回的是函数体的字符串形式,valueOf方法返回的是函数本身
Date对象的toString返回的时间的字符串表示,valueOf方法返回的是对应的时间戳