js彻底冻结一个对象
除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数。
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
js深拷贝一个对象
function deepClone(source) {
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'deepClone')
}
const targetObj = Array === source.constructor ? [] : {}
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = deepClone(source[keys])
} else {
targetObj[keys] = source[keys]
}
})
return targetObj
}
个人感觉用下面这个方法也可以:
let targetObj = JSON.parse(JSON.stringify(obj))
js String和Number转换
stirng转number主要有三种方法:
let str = "111"
let num1 = parseInt(str) //把字符串转换为整数
let num2 = parseFloat(str) //把字符串转换为浮点数
let num3 = Number(str) //把给定的值转换成数字(可以是整数或浮点数)
//类似的方法还有:
Boolean(value) //把给定的值转换成Boolean型;
String(value) //把给定的值转换成字符串。
//利用js变量弱类型转换
let num4 = str - 0
let num5 = str * 1
number转string
10..toString() //"10" 双点解析
(10).toString() //"10" 括号先计算再转换
10 + '' //"10" 加空串
//或者
let num = 10
num.toString() //"10"
js判断数据类型
Object.prototype.toString.call()返回的数据格式为 [object Object]类型,然后用slice截取第8位到倒一位,得到结果为 Object
Object.prototype.toString.call({}).slice(8,-1) //"Object"
Object.prototype.toString.call([]).slice(8,-1) //"Array"
Object.prototype.toString.call(true).slice(8,-1) //"Boolean"
Object.prototype.toString.call(1).slice(8,-1) //"Number"
Object.prototype.toString.call(NaN).slice(8,-1) //"Number"
Object.prototype.toString.call().slice(8,-1) //"Undefined"
Object.prototype.toString.call(undefined).slice(8,-1) //"Undefined"
Object.prototype.toString.call(null).slice(8,-1) //"Null"
Object.prototype.toString.call(function() {}).slice(8,-1) //"Function"
Object.prototype.toString.call(new RegExp()).slice(8,-1) //"RegExp"
网友评论