【笔记】关于JS的数据转换

数据转换

字符与数字转换

  • Number()能用于任何数据类型转换成数字

    ​ 如果是null、false返回0,如果是包含了非数字字符、undefined返回NaN

  • parseInt()和parseFloat(),分别能够返回第一个解析到的整数/包含小数

    ​ 在数字后面接上其他非数字字符不影响结果,但如果先解析字符则返回NaN

  • 双波浪符~~能够把字符转换为数字,如果字符包含非数字则返回0

在四舍五入的情况下,保留小数:toFixed(num),参数为保留的小数。

  • 四舍五入:Math.round(x)
  • 向上取整:Math.ceil(x)
  • 向下取整:Math.floor(x)
  • 0~1的随机数(含0不含1):Math.random()
  • 返回指定范围随机数[n,m]之间的范围的公式为:Math.floor(Math.random() * (max - min + 1)) + min

判断整数:

  • num%1 === 0任何整数都会被1整除,余数是0。但比较之前应该判断一下类型
  • 对数字进行四舍五入或者上下取整Math.ceil(num)===num
  • 利用十进制转化特点,parseInt(num,10) === num
  • ES6的Number.isInteger(num)

隐式转换

  • 如果数字与字符相加+,会转换为字符。
  • 如果数字与字符相减-,会转换为数字。
var a = '1';
a += 1;//这样的情况往往是a会变成字符串11
//最简单的写法是使用隐式转换
a -= (-1)//减去一个负数
  • NaN和任何变量运算结果为NaN
  • 对象的运算会先转换valueOf,再toString()

=====和Object.is()区别

==的判断规则:如果两个值类型不同,会进行转换再比较。(数字优先,字符其次)

  • null和undefined相等
  • 如果是字符串和数值比较,要全部换成数值再比较
  • 如果任一值是true,转化成1,任一值是false,转化成0 (也是转换数值
  • 如果是对象和数字或者字符串比较,对象转换为基础类型的值再比较(利用toStringvalueOf)
  • NaN不相等于NaN,也不合任何数字相等(NaN属于数值,是特殊的数值)

===的判断规则:

  • 类型不同就不相等
  • NaN不相等于NaN,也不合任何数字相等(NaN属于数值,是特殊的数值)

Object.is与===区别只有:

  • +0和-0不相等
  • NaN等于自身(因此可以用来判断一个数字是否是NaN)

一些容易搞错的变量转换

原始值 转为数字 转为字符串 转为布尔值
Infinity Infinity “Infinity” true
-Infinity -Infinity “-Infinity” true
[] 0 “” true
[10,20] NaN “10,20” true
function{} NaN “function(){}” true
{} NaN “[object Object]” true
  • 字符串只有为""的时候才会转换为false,其他均为true
console.log([]+[]);// ''
console.log([]+![]);//false
console.log([] == ![]);// true  
//	![]先转false,false在==中会转换为0
//	[]在==中会转换为"",""会转换为0
console.log([]==[]);//false

对象转换原始类型

  • 如果有Symbol.toPrimitive()方法,优先调用再返回
  • 调用valulOf(),如果转换为原始类型则返回
  • 调用toString(),如果转换为原始类型则返回
  • 以上均没有的时候:
    1. 转布尔值=>null为false,其他为true
    2. 转数字=>NaN
    3. 转字符串=> “[object Object]”

数组转换原始类型

  • 转成布尔值=>永远是true
  • 转成字符串=>去掉中括号
  • 转成数值=>先转成字符串,在转成数值类型(所以有逗号的会变成NaN)

你可能感兴趣的:(javascript,笔记,前端)