javascirpt中的基本类型:string、number、bigint、boolean、symbol、null和nudefined
除了基本类型,另外一种类型就是对象,通常以{}
的语法定义比如{name: "John", age: 30}
包装类型:String、Number、Boolean、Symbol、Bigint
四舍五入
有时候需要保留两位小数,那么我们可以先乘后除
let num = 1.23456; alert( Math.round(num * 100) / 100 ); // 1.23456 -> 123.456 -> 123 -> 1.23
还可以使用toFixed方法来保留小数位数
let num = 12.34; alert( num.toFixed(1) ); // "12.3"
保留的时候会进行四舍五入
let num = 12.36; alert( num.toFixed(1) ); // "12.4"
需要注意的是使用此API得出的结果是字符串,如果小数位数不足会补充0
let num = 12.34; alert( num.toFixed(5) ); // "12.34000", added zeroes to make exactly 5 digits
再一个就是要注意小数相加会有精度损失
alert( 0.1 + 0.2 == 0.3 ); // false alert( 0.1 + 0.2 ); // 0.30000000000000004
如果这个场景发生在电商的购物车结算尤其要注意,可能结果不是你预期的
那要如何解决精度损失的问题呢?
方法一:保留两位小数,但是返回结果是字符串
let sum = 0.1 + 0.2; alert( sum.toFixed(2) ); // 0.30
方法二:保留两位小数然后做类型转换,转换成数字
let sum = 0.1 + 0.2; alert( +sum.toFixed(2) ); // 0.3
方法三:先乘后除,但是解决的不彻底
alert( (0.1 * 10 + 0.2 * 10) / 10 ); // 0.3 alert( (0.28 * 100 + 0.14 * 100) / 100); // 0.4200000000000001
数值类型转换,可以使用parseInt或者parseFloat进行转换
alert( parseInt('100px') ); // 100 alert( parseFloat('12.5em') ); // 12.5 alert( parseInt('12.3') ); // 12, only the integer part is returned alert( parseFloat('12.3.4') ); // 12.3, the second point stops the reading
如果不是数字则转换不出来
alert( parseInt('a123') ); // NaN, the first symbol stops the process
Math类,方法1:Math.random获取随机数
alert( Math.random() ); // 0.1234567894322 alert( Math.random() ); // 0.5435252343232 alert( Math.random() ); // ... (any random numbers)
求最大、最小
alert( Math.max(3, 5, -10, 0, 1) ); // 5 alert( Math.min(1, 2) ); // 1
指数运算
alert( Math.pow(2, 10) ); // 2 in power 10 = 1024