js的一些有用技巧&字符串、数组操作
1、保留数字两位小数
实现一:number.toFixed(2)
参数:小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0
该方法不会改变原数值。
该方法会返回一个数值的字符串表现形式,保留 digits 位小数。
修改了数据类型:从数字到字符串
实现二:Math.round()
Math.round()方法:四舍五入,取得是整数,不能精确小数位。
保留两位小数先把数据扩大100倍,四舍五入后在缩小100倍即可。
round() 方法可把一个数字舍入为最接近的整数,不修改数据类型
console.log(9.02.toFixed(2))
console.log((8).toFixed(2))
console.log(Math.round(9.02))
console.log(Math.round(8))
console.log(Math.round(9.02*100)/100)
console.log(Math.round(8.1*100)/100)
console.log(Math.round(8*100)/100)
输出结果:
可知,采用先乘后除可以是Math.round也保留小数,但是对于8.1或者8还是无法保留,这时需要检测结果是否有.再在小数点后补0.
2、对于函数参数传入为不确定(对象)的情况判断及处理
一 传入参数为空或者对象
formatNumber(number, option)
如上:第二个参数option,可能不传,可能传入一个对象,对象的key 为currency
那么可以用如下代码判断,先判断option是否有,再判断currency
if (option && option.currency=== true) {
二、判断传入参数为null ,''空字符串或者不传入
if (args&&args.length !== 0) {
args可以过滤null和Undefined,args.length可以过滤‘’空字符串或者空数组
js中 0,NaN,'',null,undefined为false
if([]){}中是会进入{}的.。[]的布尔值是true
举例:[]==![]为true
分析:![]是false
[]==false,都转化为数字,那么0==0所以为true
3、数组扁平化但是只拍平第一层数组
console.log(flattenArray([[1, 2], [[3, 4], 5]])) //[1, 2, [3, 4], 5]
实现:用flag来标识,只进入一次扁平化处理
function flattenArray(array) {
var res=[];
array.map(function(item) {
var flag=true
if (flag && Array.isArray(item)){
res = res.concat(item)
flag = false;
}else {
res.push(item)
}
})
return res
}
4、将布尔值转化为数字
使用Boolean类型转换,再写一个+
5、如何确定上级作用域
当前函数执行,形成一个私有作用域A,A的上级作用域是谁,和他在哪里执行无关,只和创建定义有关,在哪里创建的,他的上级作用域就是谁
var a=12;
function fn(){
console.log(a);
}
function sum(){
var a=120;
fn();
}
sum(); //a=>20