1、类型强制转换
1.1、字符串转数字
1)、*1法
'10' * 1 // 10
'str' * 1 // NaN
null * 1 // 0
undefined * 1 // NaN
2)、+ 法
+ '10' // 10
+ 'str' // NaN
+ null // 0
+ undefined // NaN
1.2、数字转字符串
1)、加空格法
'' + 123 // '123'
123 + '' // '123'
2)、toString()法
(123).toString() // '123'
1.3、对象数组转字符串
JSON.stringify({a:1}) // '{"a":1}'
1.4、json字符串转对象
JSON.parse('{"a": 1}') // {a: 1}
注意使用1.3和1.4这两个方法,可以实现对象和数组的深度克隆,但有一定的弊端,当值为function undefined symbol时会被忽略。深度克隆详情参考:对象数组的深度克隆
2、去除数组中的假值
2.1、filter、Boolean 法
var a = [1, 2, 3, 4, 0, 5, 6, null, 7, undefined, 8, 9];
a.filter(Boolean);
2.2、老方法
var a = [1, 2, 3, 4, 0, 5, 6, null, 7, undefined, 8, 9];
a.filter(function (v) {
return !!v
});
3、箭头函数返回值
当使用箭头函数时,用{} 需要手动写返回值,而不用大括号,会自动返回值
const a = k => k*2; // 单行直接写
const b = k => ( // 多行小括号,{}返回数值需手写
'我是第一行\n'+
'我是第二行'
);
4、一次性函数
适用于执行过一次,就改为别的方法。
function sca() {
console.log("dev");
sca = function () {
console.log("foo");
}
}
sca(); // dev
sca(); // foo
sca(); // foo
5、判断数据类型
// 此方法仅能判断内置构造函数创建的数据
function type(variable) {
try{
return variable.constructor.toString().match(/[A-Z]\w+/)[0];
} catch(e) {
return typeof variable;
}
}
6、数字保留指定小数
/* 新方法 */
var round = (n, dec = 0) => Number(`${Math.round(`${n}e${dec}`)}e-${dec}`);
/* 老方法 */
function round(n, dec = 0) {
return Math.round(n * Math.pow(10,dec)) / Math.pow(10, dec);
}
7、判断数组中字符串出现次数
/* 新方法 */
var countObj = (cars) => {
return cars.reduce(function (count, current) {
count[current] = count[current] ? ++count[current] : 1;
return count;
}, {});
}
/* 老方法 */
function countObj (cars) {
var count = {};
cars.forEach(function (v) {
count[v] = count[v] ? ++count[v] : 1;
});
return count;
}
8、为数字添‘0’
/**
* 前后添零 返回字符串
* @param {Number} num 要转换的数字
* @param {number} [len=2] 保留的长度
* @param {Number|*} type 假值:整数位 1: 小数位 其他: 都填充
* @returns {String} 填充后的数字
*/
/* 新方法 */
function addZero(num, len = 2, type) {
var [numS, numE] = num.toString().split('.');
if (!type) {
return numS.padStart(len, '0') + '.' + numE;
} else if (type == 1) {
return numS + '.' + numE.padEnd(len, '0');
} else {
return addZero(addZero(num, len, 1), len);
}
}
/* 老方法 */
function addZero(num, len = 2, type) {
var [numS, numE] = num.toString().split('.');
var zero = '0000000000000000';
if (!type) {
if (numS.length >= len) return num.toString();
return (zero + numS).slice(-len) + '.' + numE;
} else if (type == 1) {
if (numE.length >= len) return num.toString();
return numS + '.' + (numE + zero).slice(0, len);
} else {
return addZero(addZero(num, len, 1), len);
}
}