null 与 undefined
null == undefined // true//转字符串时undefined + '' // 'undefined' 转为字符串undefinednull + '' // 'null' 转为字符串null// 转为数字时undefined + 0 // NaN 转数字会变成NaNnull + 0 // 0 转数字变成0// 转布尔值都为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() 函数
parseInt(string, radix) // radix的范围为2-36, 超出范围或是不符合指定进制的字符串会被转为NaN, 即无法被转化的都为NaNparseInt('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方法返回的是对应的时间戳
